こんなことがしたいことはないでしょうか。
- SVGの色を文字の色に合わせたい
- 背景色を文字の色に合わせたい
愚直にやると、SVGと文字や、背景色と文字に同じ色を指定すると思います。
div {
color: #ff0000;
background: #ff0000;
}
もしかしたらそれ currentColor
を使ったら簡単になるかもしれません。
こんなことがしたいことはないでしょうか。
愚直にやると、SVGと文字や、背景色と文字に同じ色を指定すると思います。
div {
color: #ff0000;
background: #ff0000;
}
もしかしたらそれ currentColor
を使ったら簡単になるかもしれません。
currentColor
キーワードは color
プロパティの値を表すキーワードです。<color>
値を受け入れるプロパティで利用できます。
例えば、color: #ff000
なら、currentColor
は #ff0000
になります。
<div>
Lorem Ipsum
<div class="child"></div>
</div>
div {
color: #ff0000;
}
.child {
background: currentColor;
height: 10px;
}
border-color
プロパティの初期値は currentColor
なので指定は不要です。この例だとborder-colorは #ff0000
、つまり赤色になります。
div {
color: #ff0000;
border: 1px solid;
}
書いても同じですね。
div {
color: #ff0000;
border: 1px solid currentColor;
}
currentColorキーワードはSVGでも使えてけっこう嬉しいです。アイコンなど単純な形の場合、それを文字色に合わせたいことが多いですね。
下記の例ではまるっとSVGをHTMLに書いていますが、普通は別のファイルに切り出して、importなりincludeなりするものでしょう。そんなときに、毎回色に関するパラメータを渡すとか、都度CSSで指定するということをしなくても良くなります。
<div>
Lorem Ipsum
<br />
<svg height="30" viewBox="0 0 30 30" width="30" xmlns="http://www.w3.org/2000/svg">
<circle cx="15" cy="13.75" fill="currentColor" r="12"/>
<path d="m4 27.75h22" fill="none" stroke="currentColor" stroke-miterlimit="10"/>
</svg>
</div>
div {
color: #ff0000;
}
currentColorキーワードはSVG1.0よりこれらのプロパティで利用ができます。
Webサイトによっては、ユーザーにカラーテーマ機能を提供することがあるでしょう。ふたつみっつのテーマしかなくて、指定する箇所も少ないのだったら、手で色を指定しても良いですが、それでもできるだけ指定する箇所は少なくしたいものです。
テーマの数が何十、何百となったり、指定すべき箇所が多くなったら、もう手に負えません。そんなときに currentColor
が役に立つはずです。
実際に私が関わったプロダクトでは、ユーザーが背景色と文字色を自由に指定できる機能を作りました。黒色のSVG画像がページ内にある状態で背景色が黒色に指定されたらどうするのか? それもSVGはひとつではなく何個もあるわけです。
すべてのSVGにユーザーが指定した文字色を指定するのも良いですが、そのためのコードを書き続けるのは骨の折れる仕事です。メンテナンス性も落ちるでしょう。そこで私はSVGにcurrentColorを指定する方法を選びました。
なんども同じ色を指定していることに気がついたら currentColor
キーワードが使えないか、検討してみてください。