Prefers-color-scheme — что это такое и как работает медиа-запрос в Css

Что такое prefers-color-scheme медиа-запрос и как он меняет подход к дизайну

Современные пользователи всё чаще переключаются между светлой и тёмной темами интерфейса — не только ради эстетики, но и из соображений комфорта и доступности. Браузеры и операционные системы подхватили эту тенденцию, предложив разработчикам инструмент — медиа-запрос `prefers-color-scheme`. Он позволяет адаптировать внешний вид сайтов в зависимости от предпочтений пользователя. Это не просто «модная фишка», а функциональность, напрямую влияющая на восприятие и юзабилити продукта.

Принцип работы prefers-color-scheme

Медиа-запрос `prefers-color-scheme` — часть стандарта CSS Media Queries Level 5. Он позволяет определить, предпочитает ли пользователь светлую (`light`) или тёмную (`dark`) цветовую схему. Существует и значение `no-preference`, если предпочтение не указано. Это даёт разработчику возможность адаптировать интерфейс без вмешательства пользователя.

Пример базового использования:

```css
@media (prefers-color-scheme: dark) {
body {
background-color: #121212;
color: #f0f0f0;
}
}
```

Если система пользователя настроена на тёмную тему, браузер автоматически применит эти стили. В противном случае будут использоваться стили по умолчанию или стили для светлой темы.

Насколько широко поддерживается prefers-color-scheme

На момент 2024 года поддержка prefers-color-scheme в браузерах почти универсальна. По состоянию на апрель, более 97% пользователей интернета используют браузеры, которые корректно обрабатывают этот медиа-запрос. Он поддерживается во всех актуальных версиях Chrome, Firefox, Safari, Edge и даже в мобильных браузерах Android и iOS. Это делает prefers-color-scheme безопасным выбором даже для масштабных проектов.

Как использовать prefers-color-scheme эффективно

Внедрение этого медиа-запроса — это не просто переключение фона и текста. Это возможность создать полноценные альтернативные темы, которые учитывают контекст и цели пользователя. Вот несколько нестандартных подходов:


  1. Адаптивная графика: Используйте разные версии изображений или SVG-иконок в зависимости от темы. Например, логотип в светлой теме может быть тёмным, а в тёмной — светлым.

  2. Контрастные анимации: В тёмной теме многие цвета ведут себя иначе. Убедитесь, что CSS-анимации и переходы не теряются на фоне. Вы можете использовать prefers-color-scheme, чтобы изменить keyframes.

  3. Использование CSS custom properties: Задайте переменные для цветов и переключайте значения через медиа-запрос.

Пример с переменными:

```css
:root {
--bg-color: #ffffff;
--text-color: #000000;
}

@media (prefers-color-scheme: dark) {
:root {
--bg-color: #181818;
--text-color: #e0e0e0;
}
}

body {
background-color: var(--bg-color);
color: var(--text-color);
}
```

Это удобный способ масштабировать тему и поддерживать её в больших проектах.

Нестандартные решения и практические советы

Что такое prefers-color-scheme медиа-запрос - иллюстрация

Многие разработчики ограничиваются базовой настройкой темы через prefers-color-scheme, но есть возможности пойти дальше:

1. Персонализация через JavaScript. Можно использовать JS для определения предпочтений и динамического применения классов, что удобно в SPA. Пример:

```javascript
const theme = window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light';
document.documentElement.setAttribute('data-theme', theme);
```

2. Локальное сохранение предпочтений. Если пользователь вручную выбрал тему, её можно сохранить в `localStorage` и использовать при следующем визите, при этом учитывая системные настройки как дефолт.

3. Комбинирование с prefers-reduced-motion. Пользователи, предпочитающие тёмную тему, часто также отключают анимации. Комбинируя оба медиа-запроса, можно повысить доступность интерфейса.

4. Серверный рендеринг с учётом темы. Если вы используете SSR, можно передавать тему на сервер через cookie, установленные на клиенте. Это обеспечит корректную отрисовку уже на первом экране.

Когда не стоит использовать prefers-color-scheme

Несмотря на широкую поддержку prefers-color-scheme в браузерах, есть случаи, когда его применение может быть неуместным:

- Если у вас строгий бренд-гайд и цветовая гамма должна оставаться неизменной.
- Если ваш проект ориентирован на минимальное визуальное оформление.
- Если адаптация темы требует значительных ресурсов, а трафик с устройств с поддержкой тёмной темы незначителен.

В таких случаях можно предложить ручное переключение темы, не полагаясь на системные настройки.

prefers-color-scheme для начинающих: с чего начать

Что такое prefers-color-scheme медиа-запрос - иллюстрация

Если вы только начинаете осваивать prefers-color-scheme, начните с простого:

1. Определите набор цветов для светлой и тёмной темы.
2. Определите переменные через CSS custom properties.
3. Используйте медиа-запросы для переопределения переменных.
4. Проверьте отображение в разных браузерах и устройствах.

Важно протестировать интерфейс не только визуально, но и с точки зрения восприятия: читаемость, контрастность, удобство навигации.

Заключение

Медиа-запрос `prefers-color-scheme` — это мощный инструмент для создания адаптивных и доступных интерфейсов. Он позволяет учитывать предпочтения пользователей и повышать лояльность за счёт заботы о комфорте. Зная, как использовать prefers-color-scheme правильно, вы можете не только следовать современным стандартам, но и предложить пользователям по-настоящему персонализированный опыт. Не бойтесь экспериментировать — настройка темы через prefers-color-scheme может стать не просто технической задачей, а частью философии вашего продукта.

Прокрутить вверх