ツール一覧 →

SVGの色を変えるCSSコード生成ツール

SVGを読み込んで色を選ぶと、色を変えるコードを3方式まとめて出力します。 見た目を比べて、使える方式を選んでください。

読み込んだSVGはブラウザの中だけで処理され、サーバーには送信されません。

STEP 1SVGを読み込む

SVGファイルをドロップ、またはクリックして選択 下のテキストエリアに直接貼り付けてもOK

STEP 2色を選ぶ

STEP 3見比べる

元のSVG

読み込んだそのまま

方式1:インラインSVG

完全に一致します

方式2:mask-image

形だけ使って塗ります

方式3:filter

近似です。誤差が出ます
スポンサーリンク

STEP 4コードをコピーする

方式1:インラインSVG に書き換える

推奨

HTMLに直接SVGを書き込み、fill を currentColor にします。 色はCSSの color で決まるので、ホバーやダークモードで色を変えられます。 色ズレもありません。使えるならこれが一番です。

方式2:mask-image で塗る

img のまま使える

SVGを型紙(マスク)として使い、背景色で塗りつぶします。 色は background-color で自由に指定でき、ズレません。 ただしSVGの中の色はすべて捨てられるので、単色アイコン向けです。

方式3:filter で近似する

最終手段

<img> のまま、CSSの filter を重ねて目的の色に近づけます。 HTMLを触れないときの逃げ道です。 計算で近似するため、わずかに色がずれます。 ブランドカラーの指定がある場合は方式1か2を使ってください。

どれを使えばいいか

方式向いている場面色の正確さ
インラインSVG HTMLを編集できる。ホバーやダークモードで色を変えたい。多色のSVGを扱う。 完全一致
mask-image <img> や背景として使いたい。単色のアイコン。HTMLを増やしたくない。 完全一致
filter HTMLもSVGファイルも触れない。CMSが吐き出す <img> をCSSだけで何とかしたい。 近似

なぜ img のSVGはCSSで色が変わらないのか

<img src="icon.svg"> で読み込んだSVGに fill や color を当てても効きません。

<img> の中身は別のドキュメントとして扱われるからです。 親ページのCSSは、その中の要素には届きません。画像として表示されているだけで、 ブラウザから見れば JPEG を貼っているのと変わりません。

ですので、色を変えたいなら「中身に手を届かせる(インラインSVG)」か、 「中身は諦めて形だけ使う(mask-image)」か、 「画像全体を加工する(filter)」のどれかになります。このツールはその3つを同時に出します。

filter の精度について

方式3は、黒(#000)を起点に invert → sepia → saturate → hue-rotate → brightness → contrast を重ねて、 目的の色に近づけています。

この組み合わせは手計算では求められないため、数値を少しずつ動かして最も近い解を探索しています。 探索なので、同じ色でも実行するたびに値が変わることがあります。

先頭に付けている brightness(0) saturate(100%) は、 元のSVGが何色でもいったん黒に落とすためのものです。これがないと、 色付きのSVGでは結果がずれます。

なお、この6つの組み合わせでは、そもそも到達できない色があります。 たとえば #FF0000 はぴたりと合いますが、#DC2626 のような 中間の明度・彩度の赤は、何度計算しても誤差が残ります。解の探索に失敗しているのではなく、 フィルタの式の上で届かない色です。

出力の下に出る誤差の目安を見てください。緑なら実用範囲、黄色や赤が出たら方式1か2に切り替えてください。

ブラウザの対応

mask-image は Safari と一部の古い環境で -webkit- 付きが必要です。 出力には両方入れてあります。

filter は主要ブラウザで問題なく動きます。IEは対象外です。

スポンサーリンク

関連記事

ほかのツール