Webのカラーマネジメント実務(sRGBとDisplay P3の使い分け・実装レシピ)
“色がくすむ”“ブランドカラーが違う”――Web制作で頻出する悩みの多くは ガンマ/ICC/ガamut差の取り扱いに起因します。現実解はシンプルで、まず全体は sRGB に統一、そのうえで高インパクト箇所だけ Display P3 を上乗せする二段構え。この記事では判断基準と実装レシピ、落とし穴、チェックリストまでをまとめます。
既定はsRGB。ヒーロー/ブランドキービジュアルなどに限って P3 を追加し、media="(color-gamut: p3)"
と color(display-p3 …)
で段階的に広色域を配信。フォールバックの sRGB は常に用意。
要点(TL;DR)
- まずは sRGBで統一(画像・CSS・OGP)。事故を未然に防ぐ。
- 発色がCVに効く“点”だけP3を上乗せ(LPヒーロー、ブランドカラーの面積が大きい図版など)。
- 画像は picture + media=color-gamut:p3 の二段配信。CSS色は color(display-p3 …) を
@supports
で上書き。 - 書き出し&比較は /compressor と /compare が最短。
1. なぜ“sRGB基準+P3上乗せ”なのか
すべてをP3にしても、閲覧環境がsRGBなら発色差は出ません。むしろ作業/運用コストや提出先の互換性リスクが増大します。 一方、LPヒーローのような“勝負所”ではP3が明確に効く場面があります。ゆえに 面=sRGB、点=P3 が コスト対効果で最適です。
2. 最短フロー(5分)
- 画像解像度を統一:本文 1200–1600px/一覧 600–800px。密度差は /srcset で吸収。
- 既定はsRGB。全画像をsRGBで書き出し、CSS色も sRGB の値で定義。
- 候補を洗い出し:LPヒーロー、ブランドカラーの大面積図版、製品写真の発色が重要な箇所。
- P3版を追加:該当画像だけ P3 で書き出し、
media="(color-gamut: p3)"
で提供。 - CSS色を上書き:ブランド主要色は
color(display-p3 …)
を@supports
で上乗せ。
3. 実装レシピ:画像(sRGB→P3の段階配信)
sRGBを既定とし、P3対応環境だけP3版を差し替える構成です。width/height は必須(CLS対策)。
<picture> <!-- P3対応環境(上位) --> <source media="(color-gamut: p3)" type="image/avif" srcset="/img/kv-p3-1200.avif 1200w, /img/kv-p3-1600.avif 1600w" sizes="(max-width: 800px) 100vw, 800px" /> <source media="(color-gamut: p3)" type="image/webp" srcset="/img/kv-p3-1200.webp 1200w, /img/kv-p3-1600.webp 1600w" sizes="(max-width: 800px) 100vw, 800px" /> <!-- 既定(sRGB) --> <source type="image/webp" srcset="/img/kv-srgb-1200.webp 1200w, /img/kv-srgb-1600.webp 1600w" sizes="(max-width: 800px) 100vw, 800px" /> <img src="/img/kv-srgb-1200.jpg" srcSet="/img/kv-srgb-1200.jpg 1200w, /img/kv-srgb-1600.jpg 1600w" sizes="(max-width: 800px) 100vw, 800px" width="800" height="450" loading="eager" decoding="async" alt="..." /> </picture>
書き出しは /compressor、仕上げの比較は /compare で行うと手戻りが少なくなります。
4. 実装レシピ:CSSカラー(P3を上乗せ)
まず sRGB の色を定義し、対応環境でだけ color(display-p3 …)
に置き換えます。
/* 既定:sRGB(#1D4ED8) */ :root { --brand: #1d4ed8; } .button { background: var(--brand); color: #fff; } /* 対応環境で P3(color(display-p3 r g b))を上書き */ @supports (color: color(display-p3 1 0 0)) { :root { --brand: color(display-p3 0.1176 0.3059 0.8470); } /* 近似のP3座標 */ }
5. 応用:いつP3を使うか
LPヒーロー/ブランドカラーの訴求
P3の鮮やかさがクリックや滞在に直結しやすい箇所。効果検証を前提に限定採用。
製品写真(赤/緑/オレンジの鮮やかさ)
色差の可視性が重要ならP3優位。提出先の要件(sRGBのみ)には注意。
UI全体のP3化は慎重に
可読性・コントラスト・運用負荷を天秤に。まずは sRGB で十分に読みやすい配色を作るのが定石。
6. 公開前チェックリスト(10項目)
- 画像はsRGB版を必ず用意(既定)。
- P3を使う画像は限定的に(ヒーロー等の“点”)。
picture
の最上位にmedia="(color-gamut: p3)"
を置き、sRGB版に確実にフォールバック。- imgにwidth/height を指定(CLS対策)。
- CSSのブランド色は
@supports (color: color(display-p3 …))
で上書き。 - コントラスト比(WCAG 4.5:1)を満たす。
- 提出先(広告/入稿/共有)が sRGB 前提の場合、sRGB素材を同梱。
- 発色差は /compare で 1:1 比較し記録。
- OGP/サムネは sRGB 固定(媒体互換優先)。
- ビルド/配信のサイズ・時間への影響を記録(P3の増加が小さいこと)。
7. まとめ:面はsRGB、点でP3
全体は sRGB で堅実に、効果が見込める箇所だけ P3 を上乗せ――これが品質と運用を両立する現実解です。 画像とCSSの実装テンプレをチームの標準に落とし込み、案件ごとに“点のP3”を見直していきましょう。