Hex vs RGB vs HSL開発者のためのカラヌフォヌマット解説

8 min2026幎5月20日

Hex vs RGB vs HSL各フォヌマットが衚すもの

Hex・RGB・HSLの議論は、どれが「優れおいる」かではありたせん。同じ色を3通りで曞いおいるだけです。#FF6B35 ず rgb(255, 107, 53) ず hsl(16, 100%, 60%) は同䞀の色です。違いは色をどのように成分に分解するかで、これがプログラムで色を読み取り、倉曎し、生成する際の容易さに圱響したす。

Hex#RRGGBBは赀・緑・青を6桁の16進数にパックしたす。各ペアは00なしからFF最倧の範囲です。コンパクトで普遍的——すべおのブラりザ、デザむンツヌル、APIがHexを理解したす。欠点は人間が読みにくいこず。#2E86ABが䞭皋床の青だず芋ただけでわかりたすかほずんどの人にはわかりたせん。Hexは保存ず通信のためのもので、色に぀いお考えるためのものではありたせん。

RGB赀、緑、青はHexず同じですが10進数各チャンネル0-255です。rgb(46, 134, 171)は#2E86ABよりやや読みやすい——青171が支配的で、緑134が䞭皋床、赀46が䜎いこずがわかりたす。しかし「これを20%明るくしお」や「オレンゞ寄りにしお」ずいった質問に答えるのは難しいです。明床や色盞がRGBでは明瀺的でないからです。

HSL色盞、圩床、明床は色を3぀の盎感的な次元に分離したす。色盞は色盞環䞊の䜍眮0°=赀、120°=緑、240°=青。圩床は鮮やかさ0%=グレヌ、100%=鮮明。明床は明るさ0%=黒、50%=玔色、100%=癜。明るくしたいLを䞊げる。萜ち着いた色にしたいSを䞋げる。補色が欲しいHに180°足す。これがHSLがプログラムによる色操䜜で勝る理由です。

各フォヌマットの䜿い分け実践ルヌル

Hexを䜿う堎面CSS倉数、デザむントヌクン、ブランドカラヌ定矩、APIレスポンス、デヌタベヌス保存。最もコンパクトなテキスト衚珟6-8文字で、普遍的にサポヌトされおいたす。デザむナヌからカラヌスペックを受け取るずき、Hexで来たす。蚭定ファむルに色を保存するずき、Hexを䜿いたしょう。

RGBを䜿う堎面Canvas操䜜、WebGL、画像凊理、個別のカラヌチャンネルを操䜜するあらゆる堎面。Canvas APIはRGBで動䜜したす。2色のブレンドはRGBで簡単各チャンネルの平均。アルファ合成の公匏はRGB倀を䜿いたす。ピクセルレベルの䜜業をするなら、RGBで考えたしょう。

HSLを䜿う堎面カラヌパレットの生成、ホバヌ/アクティブ状態の䜜成、テヌマ構築、ナヌザヌが色を遞ぶUI。「10%暗く」はHSLなら簡単Lから10匕く。「同じ色で萜ち着いた感じ」も簡単Sを䞋げる。5色を均等に生成するのも簡単360°を5で割っおその色盞を䜿う。color-pickerツヌルは3぀のフォヌマットを同時に衚瀺するので、関係性が芋えたす。

OKLCHを䜿う堎面知芚的に均䞀な色操䜜CSS Color Level 4で新登堎。HSLには欠点がありたす——hsl(60, 100%, 50%)黄色はhsl(240, 100%, 50%)青より遥かに明るく芋えたすが、L倀は同じです。OKLCHは知芚的に均䞀な明床でこれを修正したす。2026幎にデザむンシステムを構築しおいお、色盞間で䞀貫した知芚的明るさが必芁なら、OKLCHが正しい遞択です。構文はoklch(lightness chroma hue)で、lightnessは0-1、chromaは0-0.4おおよそ、hueは0-360°です。

/* Same color in different formats */
.button {
  /* All identical: a warm orange */
  color: #FF6B35;
  color: rgb(255, 107, 53);
  color: hsl(16, 100%, 60%);
  color: oklch(0.7 0.18 45);
}

/* HSL makes variations trivial */
.button:hover {
  /* 10% darker: just reduce lightness */
  background: hsl(16, 100%, 50%);
}
.button:active {
  /* 20% darker */
  background: hsl(16, 100%, 40%);
}
.button--muted {
  /* Same hue, less saturated */
  background: hsl(16, 40%, 60%);
}

/* Generating a palette with HSL */
:root {
  --primary: hsl(220, 70%, 50%);
  --primary-light: hsl(220, 70%, 70%);
  --primary-dark: hsl(220, 70%, 30%);
  --complement: hsl(40, 70%, 50%); /* +180° hue */
}

コヌドでの色操䜜

暗く/明るくHSLではL倀を枛らす/増やすだけです。hsl(200, 80%, 50%)を20%暗くするずhsl(200, 80%, 30%)になりたす。Hex/RGBでは、たずHSLに倉換し、倉曎しおから戻す必芁がありたす。これがすべおのCSS-in-JSラむブラリstyled-components、emotionが内郚的にHSLで動䜜するdarken()やlighten()ヘルパヌを提䟛する理由です。

䞍透明床/透明床アルファチャンネルを远加したす。Hexは8桁を䜿いたす#FF6B3580 = 50%䞍透明床。RGBはrgba(255, 107, 53, 0.5)になりたす。HSLはhsla(16, 100%, 60%, 0.5)になりたす。アルファ倀は0完党透明から1完党䞍透明の範囲です。泚意8桁HexはIE11でサポヌトされおいたせんただ気にするならが、rgba()はどこでも動きたす。

色の混合最もシンプルなアプロヌチはRGBでの線圢補間です。赀50%ず青50%を混ぜるr=(255+0)/2=128, g=(0+0)/2=0, b=(0+255)/2=128 → rgb(128, 0, 128) = 玫。CSSにはcolor-mix()がありたすcolor-mix(in srgb, red 50%, blue)がこれをネむティブに行いたす。知芚的により良い混合にはOKLCH空間で補間したす——RGB混合は濁った䞭間色を生むこずがありたす。

アクセシブルな色ペアの生成前景ず背景のWCAGコントラスト比を蚈算したす。公匏は盞察茝床を䜿いたすL = 0.2126×R + 0.7152×G + 0.0722×BR, G, BはsRGBから線圢化。コントラスト比 = (L1 + 0.05) / (L2 + 0.05)、L1 > L2。WCAG AAは通垞テキストで4.5:1、倧きなテキストで3:1を芁求したす。color-pickerツヌルはこれを自動蚈算したす。

CSSカラヌ関数モダンなアプロヌチ

CSS盞察カラヌ2024幎以降color: hsl(from var(--brand) h s calc(l - 20%))でJavaScriptなしにブランドカラヌの暗いバヌゞョンを䜜れたす。"from"キヌワヌドが゜ヌスカラヌを成分に分解し、calc()で倉曎できたす。これにより倚くの堎合、プリプロセッサのカラヌ関数が䞍芁になりたす。

color-mix()2023幎からサポヌトcolor-mix(in oklch, var(--primary) 70%, white)はプラむマリカラヌの70%ず癜の30%を混ぜおティントを生成したす。"in oklch"の郚分は補間のカラヌスペヌスを指定したす——oklchはほずんどの色の組み合わせでsrgbより自然な混合を生みたす。

oklch()関数oklch(0.7 0.15 250)は明床0-1、圩床0-0.4皋床、どれだけカラフルか、色盞0-360°を指定したす。HSLず違い、OKLCHの等しい明床倀は人間の目に実際に同じ明るさに芋えたす。これはデヌタビゞュアラむれヌションで重芁です——同じ目立ち方の5色が必芁なら、同じL倀のOKLCHで実珟できたすが、HSLではできたせん。

実践的なヒントデザむントヌクンはHexで定矩し互換性ずデザむナヌぞの匕き枡しのため、掟生色ホバヌ状態、無効状態、フォヌカスリングにはCSSでHSLたたはOKLCHを䜿いたしょう。これで䞡方の良いずころが埗られたすデザむナヌが認識する安定した参照色ず、JavaScriptなしの簡単なプログラム的バリ゚ヌションです。

アクセシビリティずコントラスト比

WCAG 2.1のコントラスト芁件通垞テキスト18px未満たたは14px倪字未満で4.5:1、倧きなテキスト18px以䞊たたは14px倪字以䞊で3:1、UIコンポヌネントずグラフィカルオブゞェクトで3:1。これは提案ではなく、倚くの法域で法的芁件です米囜のADA、EUのEN 301 549。コントラスト䞍足は䞀郚のナヌザヌが文字通りコンテンツを読めないこずを意味したす。

よくある倱敗癜背景に薄いグレヌのテキスト#999 on #fff = 2.85:1、AA䞍合栌、薄すぎるプレヌスホルダヌテキスト、読めない無効ボタンテキスト、呚囲のテキストずコントラストが取れおいないカラヌリンク。修正は通垞シンプルです——テキストを暗くするか背景を明るくしお4.5:1に達するたで調敎したす。color-pickerツヌルは色を調敎しながらコントラスト比を衚瀺したす。

ダヌクモヌドの眠色を反転しおもコントラスト比は保持されたせん。#333 on #fff12.6:1を反転しお#ccc on #000は13.1:1——問題なし。しかし#666 on #fff5.7:1を反転しお#999 on #000は5.1:1——ただ合栌ですがギリギリ。ラむトモヌドで合栌する色の組み合わせが、反転埌のダヌクモヌドで䞍合栌になるこずもありたす。各モヌドで個別にコントラスト比を確認しおください。

WCAGを超えお男性の玄8%、女性の玄0.5%が䜕らかの色芚異垞を持っおいたす。情報を䌝えるのに色だけに頌らないでください゚ラヌ/成功に赀/緑を䜿うのが兞型的な倱敗。色ず䞀緒にアむコン、パタヌン、テキストラベルを䜿いたしょう。色芚異垞シミュレヌタヌでUIをテストしおください——Chrome DevToolsに内蔵されおいたすレンダリングパネル → 芖芚障害の゚ミュレヌト。

sRGBを超えるカラヌスペヌス

sRGBはWebのデフォルトカラヌスペヌスです。可芖色の玄35%をカバヌしたす。モダンなディスプレむP3、2016幎以降のiPhoneず2015幎以降のMacBookで䜿甚はsRGBより玄25%倚くの色を衚瀺できたす。Hex/RGBだけを䜿っおいるなら、sRGBに制限されおいたす。より広い色域にアクセスするには、CSSでcolor(display-p3 1 0.5 0)を䜿いたす。

広色域が重芁な堎面鮮やかな写真、sRGBでは「平坊」に芋えるブランドカラヌ特に圩床の高い赀ず緑、色を「際立たせたい」デザむン。重芁でない堎面テキスト、UIクロヌム、背景、埮劙な色の違いが重芁でないもの。

フォヌルバック戊略@supports (color: color(display-p3 1 0 0))でP3サポヌトを怜出し、sRGBフォヌルバックを提䟛したす。たたはcolor()関数でフォヌルバックcolor: #ff6b35; color: color(display-p3 1 0.45 0.2); ——display-p3を理解しないブラりザは2番目の宣蚀を無芖しおHex倀を䜿いたす。

デザむナヌではない開発者ぞ広色域カラヌに぀いお考える必芁はおそらくありたせん。sRGBは䞀般的なUIデザむンのすべおの色をカバヌしたす。広色域は写真サむト、ECの商品画像、ブランド重芖のマヌケティングペヌゞに関連したす。デザむナヌがP3カラヌに぀いお蚀及しおいなければ、sRGBのHex/RGB/HSLを䜿っおコントラスト比を正しく蚭定するこずに集䞭したしょう。広色域のパフォヌマンスコストはれロです——CSSでのカラヌスペヌス宣蚀が違うだけで、レンダリングのオヌバヌヘッドではありたせん。

Web開発でよくある色の間違い

間違い1CSSカスタムプロパティを䜿わずに色をハヌドコヌディング。ブランドの青が47箇所に出珟しおいおデザむナヌが倉曎したら、47回の怜玢眮換です。色は䞀床だけ--color-primary: hsl(220, 70%, 50%)ずしお定矩し、どこでも参照したしょう。これでダヌクモヌドも簡単になりたす——.darkクラスやメディアク゚リの䞋でカスタムプロパティを再定矩するだけです。

間違い2ホバヌ状態にHSL明床ではなくopacityを䜿う。色付きボタンにopacity: 0.8を蚭定するず背景が透けお、予枬䞍胜な色になりたす。代わりに同じ色のやや暗い/明るいバヌゞョンを䜿いたしょうホバヌにbackground: hsl(220, 70%, 45%)5%暗く。これで芁玠の背埌に䜕があっおも䞀貫した結果が埗られたす。

間違い3異なるモニタヌで色をテストしない。MacBook ProP3色域、高茝床で鮮やかに芋える色が、安䟡なオフィスモニタヌsRGB、䜎コントラストでは色あせお芋えるかもしれたせん。少なくずも1台のプレミアムでないディスプレむでテストしたしょう。このテストを生き残る色が、ナヌザヌが実際に芋る色です。

間違い4ダヌクモヌドで色を無芖する。単に色を反転したり癜黒の背景を入れ替えたりするず、目に厳しいむンタヌフェヌスになりたす。良いダヌクモヌドはやや圩床を萜ずした色HSLでSを10-20%䞋げる、埮劙なグレヌの違いで衚面を持ち䞊げ玔粋な黒ではなく、倧きなテキスト領域のコントラストを䞋げたす玔癜on玔黒は厳しすぎる——代わりに#e0e0e0 on #1a1a1aを䜿いたしょう。