CSS・並べる・配置する

ダークモードに対応しよう

夜のスマホは黒い画面が目にやさしい。OSの「ダークモード」設定をCSSで受け取って、ページの配色を自動で切りかえる方法を覚えよう。

夜、ふとんの中で見るまぶしい白い画面——つらいですよね。だから多くの人が、スマホやPCをダークモード(黒基調の配色)に設定しています。その設定をCSSで受け取れば、あなたのページも自動で夜仕様に切りかわります。

書き方:ふだんの色+夜の上書き

まずふだん(ライト)の色を書き、ダークモードのときだけ上書きします。

body {
  background: #ffffff;
  color: #333333;
}

@media (prefers-color-scheme: dark) {
  body {
    background: #1b1b1f;
    color: #e6e6e6;
  }
}

ダークモード設定の人がページを開くと、背景が濃い色・文字が明るい色に自動で切りかわります。JavaScriptは1行も要りません。

CSSスマホでも見やすく:メディアクエリ@mediaそのものの仕組みは、メディアクエリの回でおさらいできます

動きを見てみよう

本物はOSの設定にブラウザが自動で反応しますが、このデモではボタンで疑似的に切りかえます。

本物のページでは、このボタンの役目をOSの設定が果たします。設定を切りかえた瞬間、開いているページの色も変わります。

夜の配色、3つの気をつけどころ

  • 真っ黒×真っ白にしない#000背景に#fff文字はコントラストが強すぎて目が疲れます。背景は#1b1b1fのような少し明るい黒、文字は#e6e6e6のような少し暗い白が定番です
  • 読めるかは夜も確認 — 色を反転すると、ライトでは読めた組み合わせが読めなくなることがあります。ダークモードでもコントラスト比の合格ラインは同じです
  • 全部の色を用意しなくていい — まずは背景と文字色だけで十分。カードや枠線は、ページが育ってから少しずつ
アクセシビリティ読める色、読めない色(コントラスト)コントラスト比の確かめ方は、アクセシビリティコースのこの回でCSSCSS変数で色をまとめて管理色を1か所で管理するCSS変数の回はこちら

ブラウザ標準の部品にも伝える:color-scheme

:root {
  color-scheme: light dark;
}

prefers-color-scheme自分の書いたCSSに効く合図でしたが、color-schemeブラウザ自身の部品への合図です。これを書いておくと、スクロールバーやチェックボックスといった、自分では色を書いていない標準部品も、設定に合わせて自動で切りかわるようになります。

このレッスンのまとめ

  1. @media (prefers-color-scheme: dark)で、ダークモード設定の人にだけ効くCSSが書ける
  2. ふだんの色を先に書き、ダークのときだけ上書きする
  3. 真っ黒×真っ白は避けて、少しやわらげた黒と白を使う

やってみよう

今回学んだ「ダークモード対応」は、しまちゃんのページには使いません(クリーム色のやさしい世界観で統一しています)。読みものの多いサイトや、夜に使われるページで喜ばれる工夫です。覚えておいて、必要になったら使いましょう。

よくある質問

画像もダークモードで暗くなるの?
自動では暗くなりません。写真やイラストはそのままの色で表示されます。まずは背景と文字色の対応だけで十分で、画像まわりは慣れてから少しずつ調整しましょう。
ページ内のボタンでダークモードを切りかえたい
prefers-color-schemeはOSの設定を読むだけなので、ページ内のボタンでは直接切りかえられません。利用者が手元で選べるようにするには、JavaScriptでクラスを付け替える仕組みが別途必要になります。
スクロールバーの色も変えられる?
はい。:root { color-scheme: light dark; } と書いておくと、スクロールバーやチェックボックスなどブラウザ標準の部品も設定に合わせて自動で切りかわります。