Widely available 条件付きOK。主要ブラウザで対応済み。フォールバックカラーを定義すること。

概要

HSL は人間の視覚と合わないため、同じ lightness 値でも色によって明るさが異なって見える。OKLCH は知覚的均一性を持ち、L(明度)・C(彩度)・H(色相)を変えても視覚的に一貫したカラーパレットを生成できる。

対応ブラウザ

デスクトップ

Chrome 111+
Edge 111+
Safari 15.4+
Firefox 113+

モバイル

Chrome Android 111+
Safari iOS 15.4+
Firefox Android 113+

基本構文

CSS
/* OKLCH: oklch(明度 彩度 色相 / 透明度) */
:root {
  --brand: oklch(0.6 0.15 250);
  --brand-light: oklch(0.8 0.1 250);
  --brand-dark: oklch(0.4 0.15 250);
}

/* OKLab: oklab(明度 a軸 b軸) */
.oklab-example {
  background: oklab(0.7 -0.1 0.1);
}

/* 知覚的に均一なカラースケール */
.palette {
  --hue: 250;
  --step-1: oklch(0.95 0.03 var(--hue));
  --step-5: oklch(0.70 0.12 var(--hue));
  --step-9: oklch(0.30 0.12 var(--hue));
}

実務での使いどころ

  • デザインシステムのカラーパレット

    明度を段階的に変えるだけで、視覚的に均一なステップのカラースケールを生成できる。HSL では青と黄で明るさが大きく異なる問題を解決する。

  • ダークモードの色変換

    OKLCH の明度のみを反転させることで、色相と彩度を保ったまま自然なダークモードカラーを生成できる。

注意点

  • sRGB 色域外の色は、非対応モニターで自動的にクランプされる。意図した色と異なる場合がある。
  • CSS カスタムプロパティと oklch() の組み合わせは、calc() 内で色相を動的に計算する際に注意が必要。

フォールバック戦略

CSS
/* sRGB フォールバック付き */
.element {
  background-color: #4466cc;
  background-color: oklch(0.55 0.15 260);
}

/* @supports での分岐 */
@supports (color: oklch(0 0 0)) {
  :root {
    --brand: oklch(0.6 0.15 250);
  }
}

アクセシビリティ

  • OKLCH の均一な明度はコントラスト比の予測を容易にするが、最終的には WCAG のコントラスト比チェックツールで検証すること。
  • 色相だけで情報を区別しないこと。形状やラベルなど色以外の手がかりも併用する。