システムカラーには、現在使用されている color-scheme
値に反応する機能があります。light-dark()
関数は、同じ機能を作成者に公開します。
CSS のシステムカラー
CSS では、多数の色空間のうち 1 つからさまざまな色を使用できます。たとえば、名前付きの色、16 進数色コード、特定の色空間にリンクされたカラー関数、より一般的な color()
関数を使用できます。
たとえば、名前付きの色 cornflowerblue
は、#6495ED
、hsl(218.54deg 79.19% 66.08%)
、color(display-p3 0.43 0.58 0.9)
などで表すこともできます。
これらのさまざまな名前や形式に加えて、CSS には、CSS カラー モジュール レベル 4 で指定されている、システムカラーとして記述されている色があります。これらのシステムカラーはブラウザによって定義される色であり、キーワードで表されます。
たとえば、システムカラー Canvas
は「アプリのコンテンツまたはドキュメントの背景」を表します(<canvas>
要素と混同しないでください)。これは、「アプリケーションのコンテンツまたはドキュメント内のテキスト」を表す CanvasText
と適切に連携し、これらと組み合わせて使用することも意図しています。
CSS では次のように使用します。
body {
color: CanvasText;
background-color: Canvas;
}
デフォルトでは、CanvasText
は black
に近い色になります。Canvas
は white
に近い色です。実際の実装はブラウザによって異なります。たとえば、Chrome の CanvasText
では #121212
になりますが、Safari では少し明るい #1e1e1e
として指定されます。
これらのシステムカラーの隠れた利点は、color-scheme
プロパティの計算値に応答できることです。たとえば、使用された color-scheme
が dark
の場合、CanvasText
と Canvas
の値が反転します。
:root {
color-scheme: dark;
}
body {
color: CanvasText;
background-color: Canvas;
}
次のデモでは、:root
に設定された color-scheme
の値を変更し、ページがどのように反応するかを確認できます。
light dark
に設定すると、要素がライトモードとダークモードの両方をサポートしていることを示します。どの値を使用するかは、prefers-color-scheme
メディア条件の値に応じて選択します。light
に設定すると、要素がライト カラーパターンをサポートしていることを示します。dark
に設定すると、要素がダーク カラーパターンをサポートしていることを示します。
light-dark()
のご紹介
対応ブラウザ
- <ph type="x-smartling-placeholder">
- <ph type="x-smartling-placeholder">
- <ph type="x-smartling-placeholder">
- <ph type="x-smartling-placeholder">
これまでは、使用された color-scheme
値への対応は、システムカラー用に予約されていたものでした。CSS カラー モジュール レベル 5 で指定されている light-dark()
のおかげで、同じ機能も使えるようになりました。
light-dark()
は、2 つの引数(どちらも <color>
である必要があります)を受け入れる関数です。使用するカラーパターンに応じて、いずれか 1 つが選択されます。
- 使用されたカラーパターンが
light
または不明な場合は、最初の値の計算値が返されます。 - 使用されたカラーパターンが
dark
の場合は、2 番目の色の計算値が返されます。
light-dark()
の結果は <color>
です。<color>
が受け入れられる場所であれば、どこでも CSS で使用できます。たとえば、color
プロパティと background-color
プロパティだけでなく、linear-gradient()
などの関数でもこれに該当します。
次の例では、使用される背景色は、ダークモードでは #333
、ライトモード(または不明なモード)では #ccc
です。
:root {
color-scheme: light dark;
}
body {
background-color: light-dark(#ccc, #333);
}
light-dark()
を正しく動作させるには、color-scheme
を指定する必要があります。このプロパティは継承されるため、通常は :root
で設定しますが、必要に応じて特定の要素で設定することもできます。
実践的応用
次の例では、いくつかのカスタム プロパティがページ上の色を表しています。ダークモードに対応するため、これらのカスタム プロパティの値は、prefers-color-scheme
メディア条件の別の値で上書きされます。
:root {
--primary-color: #333;
--primary-background: #e4e4e4;
--highlight-color: hotpink;
}
@media (prefers-color-scheme: dark) {
:root {
--primary-color: #fafafa;
--primary-background: #121212;
--highlight-color: lime;
}
}
light-dark()
のおかげで、このコードを簡略化できます。:root
で color-scheme
が light dark
に設定されているため、OS をライトモードからダークモードに、またはその逆に、これらの色の値は自動的に変更されます。
:root {
color-scheme: light dark;
--primary-color: light-dark(#333, #fafafa);
--primary-background: light-dark(#e4e4e4, #121212);
--highlight-color: light-dark(hotpink, lime);
}
さらに、color-scheme
を dark
または light
に設定することで、DOM の特定のサブツリーでライトモードまたはダークモードのみを使用するように強制することもできます。次の例では、これは :root
に適用されます。