Newly available 条件付きOK。color-scheme の宣言が前提。主要ブラウザで対応済み。ダークモード実装の新しいベストプラクティスとして注目。

概要

light-dark() は color-scheme プロパティと連動し、ライトモードでは第1引数、ダークモードでは第2引数の色が使われる。prefers-color-scheme メディアクエリを使わずに、1箇所でライト/ダーク両方の色を定義できるため、カスタムプロパティのダークモード対応が格段にシンプルになる。

対応ブラウザ

デスクトップ

Chrome 123+
Edge 123+
Safari 17.5+
Firefox 120+

モバイル

Chrome Android 123+
Safari iOS 17.5+
Firefox Android 120+

基本構文

CSS
:root {
  color-scheme: light dark;

  --bg: light-dark(#ffffff, #1a1a2e);
  --text: light-dark(#1a1a2e, #e0e0e0);
  --border: light-dark(#d1d5db, #374151);
  --accent: light-dark(#2563eb, #60a5fa);
}

body {
  background-color: var(--bg);
  color: var(--text);
}

.card {
  border: 1px solid var(--border);
}

実務での使いどころ

  • シンプルなダークモード実装

    メディアクエリを使わずに、カスタムプロパティの定義内でライト/ダーク両方の色を宣言できる。

  • コンポーネント単位の色定義

    コンポーネントごとに独立したライト/ダーク色を light-dark() で定義し、テーマの管理を簡素化する。

注意点

  • color-scheme プロパティが宣言されていないと機能しない。:root に color-scheme: light dark を必ず指定すること。
  • light-dark() は color プロパティ値専用。色以外の値(padding や font-size など)には使えない。

フォールバック戦略

CSS
/* 非対応ブラウザ用フォールバック */
:root {
  --bg: #ffffff;
  --text: #1a1a2e;
}

@media (prefers-color-scheme: dark) {
  :root {
    --bg: #1a1a2e;
    --text: #e0e0e0;
  }
}

アクセシビリティ

  • ダークモードの色でも十分なコントラスト比を確保すること。ライトとダークの両方でコントラスト比を検証する。