テック技報最新号へ →
CSS

light-dark() で背景画像もライト/ダークで切り替える

light-dark() が色だけでなく画像も受け取れるようになり、background-image などをメディアクエリなしで切り替えられる。

@sanyampunia · 2026-10-31
#ダークモード#light-dark#color-scheme#背景画像#モダンCSS

どんな時に使う?

  • ヒーロー画像や背景パターン、ロゴ、アイコンをダークモード用に差し替えたいとき。
  • 従来は @media (prefers-color-scheme: dark) の中でカスタムプロパティを書き換えていたが、その方法だと OS 全体の設定しか見ないため、ページの一部だけ color-scheme: dark にした場所では切り替わらない。light-dark() はその要素で実際に使われている color-scheme に従うので、部分的なダーク領域でも正しく動く。

コード

css
:root {
  color-scheme: light dark; /* これがないと常にライト側が選ばれる */
}

.hero {
  background-image: url(day.svg); /* 未対応ブラウザ向けのフォールバック */
  background-image: light-dark(url(day.svg), url(night.svg));
}
  • 1つ目の引数がライト、2つ目がダーク。url() のほか image-set()、グラデーション、none も使える。
  • background-image だけでなく list-style-image、border-image-source、cursor、content でも使える。
  • 色と画像を混ぜることはできない(2つとも色、または2つとも画像)。
  • 対応判定は @supports (background-image: light-dark(none, none)) { ... } で書ける。

注意点・対応状況

出典

X の元の投稿を開く