≪ Today I learned.
RSS購読
    公開日
    タグ
    CSS
    著者
    ダーシノ

    light-dark()でモードにあわせた画像に切り替える

    ライトモードとダークモードの切り替えに値を変更するlight-dark()に、imageを指定することでモードにあわせた画像切り替えができるようになった。

    ※執筆時点(2026年6月)ではFirefox 150、Safari TP 246のみサポート

    従来の画像切り替え

    いままでは、picture要素やメディアクエリのprefers-color-scheme、CSS変数、JavaScriptなどを使って切り替え処理を行っていた。

    Picture要素を使った切り替え

    <picture>
      <source srcset="light.png" media="(prefers-color-scheme: light)">
      <source srcset="dark.png" media="(prefers-color-scheme: dark)">
      <img src="light.png" alt="Light and Dark Image">
    </picture>

    CSSのメディアクエリを使った切り替え

    .image {
      background-image: url(light.png);
    }
    
    @media (prefers-color-scheme: dark) {
      .image {
        background-image: url(dark.png);
      }
    }

    JavaScriptを使った切り替え

    const dark = window.matchMedia('(prefers-color-scheme: dark)').matches;
    
    if (dark) {
      document.querySelector('.image').src = 'dark.png';
    } else {
      document.querySelector('.image').src = 'light.png';
    }

    light-dark()を使った切り替え

    :root {
      color-scheme: light dark;
    }
    
    /* url()を使った画像切り替え */
    .image {
      background-image: light-dark(
        url(light.png),
        url(dark.png)
      );
    }
    
    /* linear-gradient()を使った背景画像の切り替え */
    .background: {
      background-image: light-dark(
        linear-gradient(#fff, #000),
        linear-gradient(#000, #fff)
      );
    }

    background-imageを使うときの注意点

    background-imageは適切なroleやsourceを指定しない限り、支援技術には認識されない。そのため、主に装飾目的として使われる。そのため、dark-light(<image>, <image>)は用途を限定して使う必要がある。

    ユーザーに内容を伝える必要がある画像の場合は、picture要素やimg要素を使うのが良いだろう。

    デモ

    light-dark(image, image)

    light-dark()のデモ