Web配色とoklch設計
はじめに
Webの配色設計では、ベースカラー・メインカラー・アクセントカラーの3つを軸に考えることが多くあります。 サービスのコンセプトや性質に応じて、どのような色を採用するかを検討していきます。
本記事では、色の基本的な構成要素を整理したうえで、CSS の oklch を用いた配色設計と、その運用例について紹介します。
色の三属性
色は主に、色相・明度・彩度の3要素で構成されています。
色相は赤や青といった色味の違いを表し、明度は色の明るさを示します。 彩度は色の鮮やかさを表し、数値が高いほど視認性が高くなります。
これらの要素をどのように組み合わせるかによって、画面全体の印象が決まります。
同系色による配色
色相を同じ、もしくは近い値に揃えた配色は、同系色配色と呼ばれます。 この配色では、全体に統一感が生まれ、落ち着いた印象を与えやすくなります。
色同士が過度に主張し合わないため、視覚的なノイズが抑えられ、配色設計に慣れていない場合でも扱いやすい点が特徴です。
色調(トーン)という考え方
色相ではなく、明度や彩度を揃える設計もあります。 この考え方は「色調(トーン)」と呼ばれ、以下の資料で詳しく解説されています。
https://zokeifile.musabi.ac.jp/%E8%89%B2%E8%AA%BF/
例えば、彩度を最も高く揃えたビビッドトーンの配色があります。 ビビッドトーンは鮮やかさが強く、活気のある印象を与えます。
https://tee-room.info/color/tone-v.html
一方で、彩度を抑え、明度を高くしたペールトーンという配色もあります。 ペールトーンは淡い色合いとなり、柔らかく穏やかな印象を持ちます。
https://tee-room.info/color/tone-p.html
これらの配色体系については、「PCCS 日本色研配色体系」で調べると、体系的に学ぶことができます。
OKLCH による配色定義
CSS では、明度・彩度・色相を明示的に指定できる oklch カラーモデルを利用できます。 このモデルを用いることで、配色の意図を数値として保持したまま設計できます。
https://developer.mozilla.org/ja/docs/Web/CSS/Reference/Values/color_value/oklch
以下は、色相を1つに限定した同系色配色の例です。 まず、色相・明度・彩度を変数として定義します。
:root {
/* 色相は1つだけ */
--hue-base: 238deg;
/* 明度はいくつか用意する */
--lightness-95: 0.95;
--lightness-92: 0.92;
--lightness-90: 0.9;
/* 彩度もいくつか用意する */
--chroma-20: 0.017;
--chroma-10: 0.01;
--chroma-0: 0.006;
}
これらの変数を組み合わせて色を定義します。 以下は、背景色に適用した例です。
:root {
--background: oklch(var(--lightness-95) var(--chroma-0) var(--hue-base));
}
色相の変更によるテーマ切り替え
上記の同系色配色を、個人開発の Web サービスに取り入れています。
Fequest(Feature Request の略)は、機能リクエストを送信できるサービスです。 このサイトでは、ログイン後の設定ページから色相を変更できるようにしています。
色相を切り替えることで、選択した色味に応じてページ全体の配色が変化します。 同系色配色を採用しているため、どの色相を選んでも落ち着いた印象を保てます。
色のコントラストと可読性
配色設計では、見た目だけでなく可読性の確保も重要です。 Storybook の a11y アドオンを有効にすると、各 Story に対して色コントラストの検証を行えます。
https://storybook.js.org/docs/writing-tests/accessibility-testing
このチェックを前提として開発を進めることで、最低限の色コントラストを継続的に維持できます。
おわりに
oklch を用いた配色設計は、色の意図を数値として管理しやすく、テーマ展開やアクセシビリティ対応とも相性の良い方法です。 色を感覚だけで扱うのではなく、構造として整理できる点が、この手法の特徴だと考えています。