Spec-Zone.ru › CSS

CSS-медиавыражение `prefers-color-scheme`

Базовая поддержка Широко доступно

Эта функция хорошо зарекомендовала себя и работает на многих устройствах и в разных версиях браузеров. Она доступна во всех браузерах с января 2020 года.

Медиавыражение prefers-color-scheme в CSS используется для определения того, выбрал ли пользователь светлую или тёмную цветовую тему. Пользователь указывает свои предпочтения в настройках операционной системы (например, светлый или тёмный режим) либо в настройках пользовательского агента.

Встроенные элементы

Для SVG и iframe prefers-color-scheme позволяет задать стиль CSS для SVG или iframe на основе color-scheme родительского элемента на веб-странице. SVG должны быть встроены (то есть <img src="circle.svg" alt="circle" />), а не включены в HTML-код. Пример использования prefers-color-scheme в SVG приведён в разделе «Унаследованная цветовая схема во встроенных элементах».

Использовать prefers-color-scheme разрешено во междоменных элементах <svg> и <iframe>. Междоменные элементы — это элементы, загруженные с другого хоста, чем страница, на которой на них ссылаются. Подробнее о SVG см. в документации по SVG, а о iframe — в документации по iframe.

Синтаксис

light
Указывает, что пользователь предпочитает интерфейс со светлой темой или не выразил явных предпочтений.
dark
Указывает, что пользователь предпочитает интерфейс с тёмной темой.

Примеры

Определение тёмной или светлой темы

Обычно по умолчанию используется светлая цветовая схема, а затем с помощью prefers-color-scheme: dark цвета меняются на более тёмный вариант. Можно сделать и наоборот.

В этом примере показаны оба варианта: в теме A используются светлые цвета, но их можно заменить тёмными. В теме B используются тёмные цвета, но их можно заменить светлыми. В конечном итоге, если браузер поддерживает prefers-color-scheme, обе темы будут светлыми или тёмными.

HTML

<div class="box theme-a">Theme A (initial)</div>
<div class="box theme-a adaptive">Theme A (changed if dark preferred)</div>
<br />

<div class="box theme-b">Theme B (initial)</div>
<div class="box theme-b adaptive">Theme B (changed if light preferred)</div>

CSS

div.box {
  display: inline-block;
  padding: 1em;
  margin: 6px;
  outline: 2px solid black;
  width: 12em;
  height: 2em;
  vertical-align: middle;
}

Тема A (коричневая) по умолчанию использует светлую цветовую схему, но переключается на тёмную в соответствии с медиазапросом:

.theme-a {
  background: #ddccaa;
  color: #773311;
}
@media (prefers-color-scheme: dark) {
  .theme-a.adaptive {
    background: #775533;
    color: #ddccbb;
    outline: 5px dashed black;
  }
}

Тема B (синяя) по умолчанию использует тёмную цветовую схему, но переключается на светлую в соответствии с медиазапросом:

.theme-b {
  background: #444477;
  color: #bbbbdd;
}
@media (prefers-color-scheme: light) {
  .theme-b.adaptive {
    background: #bbccdd;
    color: #333344;
    outline: 5px dotted black;
  }
}

Результат

В блоках слева показаны темы A и B в том виде, в каком они отображались бы без медиазапроса prefers-color-scheme. В блоках справа показаны те же темы, но одна из них меняется на более тёмный или светлый вариант в зависимости от активной цветовой схемы пользователя. Контур одного из блоков будет пунктирным или точечным, если он изменился в соответствии с настройками браузера или операционной системы.

Унаследованная цветовая схема во встроенных элементах

В следующем примере показано, как использовать медиавыражение prefers-color-scheme во встроенном элементе, чтобы унаследовать цветовую схему родительского элемента. Скрипт задаёт источники элементов <img> и их атрибуты alt. Обычно это задавалось бы в HTML как <img src="circle.svg" alt="circle" />.

Вы должны увидеть три круга, один из которых нарисован другим цветом. Первый круг наследует color-scheme операционной системы; его можно переключить с помощью переключателя темы в настройках ОС.

Второй и третий круги наследуют color-scheme встраивающего элемента; запрос @media позволяет задавать стили содержимого SVG на основе color-scheme родительского элемента. В этом случае родительский элемент со свойством CSS color-scheme — это <div>.

<div>
  <img alt="circle" src="" />
</div>
<div class="light">
  <img alt="circle" src="" />
</div>
<div class="dark">
  <img alt="circle" src="" />
</div>
.light {
  color-scheme: light;
}

.dark {
  color-scheme: dark;
}
// Embed an SVG for all <img> elements
for (const img of document.querySelectorAll("img")) {
  img.src = `data:image/svg+xml;base64,${window.btoa(`
    <svg width="32" height="32" viewBox="0 0 32 32" xmlns="http://www.w3.org/2000/svg">
      <style>
        :root { color: blue }
        @media (prefers-color-scheme: dark) {
          :root { color: purple }
        }
      </style>
      <circle fill="currentColor" cx="16" cy="16" r="16"/>
    </svg>
  `)}`;
}

Спецификации

Спецификация
Медиазапросы уровня 5
# prefers-color-scheme

Совместимость с браузерами

Настольные Мобильные
Chrome Edge Firefox Opera Safari Chrome Android Firefox для Android Opera Android Safari на iOS Samsung Internet WebView Android WebView на iOS
prefers-color-scheme
76
79
67
62
12.1
76
67
54
13
14.2
76
13
no-preference
76–80
79–80
67–79
62–71
12.1–15
76–80
67–79
54
13–15
14.2
76–80
13–15
respects-inherited-scheme
129
111–129Поддерживаются только изображения SVG, но не iframe.
129
111–129Поддерживаются только изображения SVG, но не iframe.
105
115
97–115Поддерживаются только изображения SVG, но не iframe.
Нет
129
111–129Поддерживаются только изображения SVG, но не iframe.
105
86
75–86Поддерживаются только изображения SVG, но не iframe.
Нет
28.0
22.0–28.0Поддерживаются только изображения SVG, но не iframe.
129
111–129Поддерживаются только изображения SVG, но не iframe.
Нет

См. также

  • color-scheme — свойство
  • <meta name="color-scheme">
  • Sec-CH-Prefers-Color-Scheme — HTTP-заголовок подсказки клиента пользовательского агента
  • Имитация prefers-color-scheme в Firefox
  • Видео: создание тёмного режима для вашего сайта
  • Как адаптировать продукт и сайт для тёмного режима
  • Изменение цветовых схем в Windows, macOS, Android или других платформах.

© 2005–2025 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/CSS/Reference/At-rules/@media/prefers-color-scheme

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API