Spec-Zone.ru › 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 для переопределения цветов на тёмную вариацию. Также можно поступить наоборот.

Этот пример демонстрирует оба варианта: тема А использует светлые цвета по умолчанию, но может быть переопределена на тёмные цвета. Тема В использует тёмные цвета по умолчанию, но может быть переопределена на светлые цвета. В итоге, если браузер поддерживает 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

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

.theme-a {
  background: #dca;
  color: #731;
}
@media (prefers-color-scheme: dark) {
  .theme-a.adaptive {
    background: #753;
    color: #dcb;
    outline: 5px dashed #000;
  }
}

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

.theme-b {
  background: #447;
  color: #bbd;
}
@media (prefers-color-scheme: light) {
  .theme-b.adaptive {
    background: #bcd;
    color: #334;
    outline: 5px dotted #000;
  }
}

Результат

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

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

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

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

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

<div>
  <img />
</div>

<div style="color-scheme: light">
  <img />
</div>
<div style="color-scheme: dark">
  <img />
</div>

<!-- Embed an SVG for all <img> elements -->
<script>
  for (let img of document.querySelectorAll("img")) {
    img.alt = "circle";
    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>
    `);
  }
</script>

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

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

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

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

См. также

  • color-scheme Свойство CSS
  • Sec-CH-Prefers-Color-Scheme HTTP-заголовок Сведения о клиенте пользователя
  • Эмулирование prefers-color-scheme в Firefox (Инспектор страниц Firefox > Просмотр и редактирование CSS)
  • Видеоурок: Разработка тёмного режима для вашего веб-сайта
  • Редизайн вашего продукта и веб-сайта для тёмного режима
  • Изменение цветовых схем в Windows, macOS, Android или на других платформах.

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

Spec-Zone.ru

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