CSSの色名(ネームドカラー)の仕組み

CSSでは色コードの代わりに「Tomato」や「SlateBlue」のような名前をそのまま書けますが、その裏にあるリストは多くの人が思っているよりずっと古く、体系的でもありません。

ネームドカラーは決まったHEX値にひもづく予約語

CSSでcolor: tomato;と書くのは、color: #FF6347;と書くのと機能的にまったく同じです。ブラウザはその名前をあらかじめ定義されたHEX値にそのまま置き換えているだけで、そこに計算は含まれません。

CSS仕様で定義されているのは147色

これにはgrayとgreyのように、アメリカ式とイギリス式のつづりの違いを別々の名前として数えているものも含まれ、両方とも同じ値に解決されます。つづりの違いを1色として数えるか2色として数えるかで、総数の数え方は多少変わります。

このリストはCSS発祥ではなく、X11やSVGに由来する

これらの名前の多くはウェブのために考案されたものではなく、1980年代のX11ウィンドウシステムの色リストにさかのぼり、それをSVGが取り入れ、さらにCSSがSVGから引き継いだもので、独自にデザインされたパレットではありません。

名前は色相に沿って体系的に並んでいるわけではない

Tomato(赤みのオレンジ)、SlateBlue(くすんだ青紫)、Chartreuse(鮮やかな黄緑)といった名前は、体系立てられた配色システムではなく、歴史的に感覚的につけられた名前であるため、名前だけから色合いを正確に推測するのは難しいです。

基本の16色と、追加された131色

最初のCSS1仕様で定義されていたのは黒・白・赤などの基本的な16色のみで、それよりずっと多い拡張リストは後になってSVG/X11のカラーキーワードセットからそのまま取り入れられたものです。

transparentキーワードは特別な存在

他のネームドカラーとは異なり、transparentは不透明なHEX値に対応するものではなく、完全に透明な黒を表し、機能的にはrgba(0,0,0,0)と同じです。

これらの名前がこれほど歴史的で無秩序に感じられる理由

これらの名前の元になったX11のカラーリストは、1980年代に初期のUnixグラフィカルシステム向けに作られたもので、体系的な色相の理論に基づいてではなく、身近な物や布地、顔料などにちなんだ感覚的な命名によってまとめられました。CSSも、その前身であるSVGも、このリストを再設計するのではなく互換性と手軽さのためにそのまま採用したため、意図的に整理された配色システムというよりは、歴史的な遺産のような印象を今でも残しています。

ネームドカラーが役立つ場面と、HEXやRGBのほうがよい場面

素早いプロトタイピングや、読みやすいサンプルコード、あるいはtransparentやcurrentColorのように数値で書き表せないCSSキーワードには、ネームドカラーは本当に便利です。一方でブランドの正確な色や、デザインシステムのパレットを厳密に再現したい場合、細かい色の調整が必要な場合には、ネームドカラーのパレットは固定されていてほとんどの色を正確には表せないため、HEXやRGB値を使うほうが信頼できます。

よくある質問

CSSで使えるネームドカラーは実際にはいくつありますか?

CSSのColor仕様では147のカラーキーワードが定義されていますが、grayとgreyのようなつづり違いを1色として数えるか2色として数えるかによって、数え方は多少変わります。どちらも同じHEX値に解決されます。

ネームドカラーはどのブラウザでも同じ見た目になりますか?

はい。ネームドカラーはCSS仕様の中で固定のHEX値として標準化されているため、モダンブラウザであればどれでも同じ色として表示されます。システムフォントやフォーム部品の既定スタイルのようなブラウザ間の違いはありません。