SVG はアイコンやイラストに広く使われる形式で、CSS を使って柔軟に色を変更できます。ただし、埋め込み方法(<img> / CSS 背景 / インライン SVG)によって適用できる手段が異なります。本記事では SVG の色変更テクニックをケースごとにまとめます。
<img>タグで読み込んだSVG
<img src="icon.svg"> の形で読み込んだ場合、直接 CSS の color や fill は適用できません。この場合は以下のような工夫が必要です。
- 色違いのファイルを用意する
- SVG を
background-imageに埋め込み、filterで色調整する
/* 青系 (#1e6dc1) をフィルターで水色系 (#4A93EF) に近づける例 */
.icon-blue img {
filter: invert(54%) sepia(29%) saturate(643%) hue-rotate(182deg) brightness(95%) contrast(91%);
}
正確な色変更は難しいため、インラインSVGを使う方が推奨です。
CSS背景として使う場合
SVG を background-image として読み込んだ場合も、直接色を変えることはできません。色を変えたい場合は、fill の値を変更した SVG ファイルを別途用意するか、mask-image を使います。
.icon {
width: 40px;
height: 40px;
background: url('icon.svg') no-repeat center/contain;
}
.icon-mask {
width: 40px;
height: 40px;
background-color: #e35f57; /* 任意の色 */
-webkit-mask: url('icon.svg') no-repeat center/contain;
mask: url('icon.svg') no-repeat center/contain;
}
マスクを使う方法なら、背景色を変えるだけで自由に色を切り替えられます。
インラインSVGで埋め込む場合
最も柔軟なのが、HTMLに直接SVGコードを書き込む方法です。fill や stroke を CSS で変更できます。
<svg class="icon" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
<path d="M12 2L2 22h20L12 2z" />
</svg>
.icon {
width: 40px;
height: 40px;
fill: #02a1cd; /* パスの塗りを変更 */
stroke: #333; /* 線の色を変更 */
}
currentColor を使う
SVG の fill="currentColor" を指定しておけば、親要素や自身に設定された color を反映できます。テキストと同じ色で統一したいときに便利です。
<svg class="icon" viewBox="0 0 24 24">
<path d="M12 2L2 22h20L12 2z" fill="currentColor"/>
</svg>
.icon {
color: #e35f57; /* この値が反映される */
}
まとめ
<img>やbackground-imageでは直接変更不可。フィルターやマスクで代用可能。- 自由度が高いのはインラインSVG。CSSの
fill・strokeで簡単に変更できる。 currentColorを使えば、テキスト色と連動して自動的に色が変わる。
実務では、再利用性やメンテナンス性を考慮して「インラインSVG + currentColor」を基本とし、必要に応じてマスクやフィルターを使い分けるのがおすすめです。

