Почему тёмная тема — это не просто мода
Тёмная тема перестала быть дизайнерским экспериментом и стала ожиданием пользователей. Она снижает нагрузку на глаза в условиях низкой освещённости, экономит заряд батареи на OLED-экранах и просто нравится многим. Но реализация требует понимания не только CSS, но и JavaScript, системных предпочтений и особенностей браузеров.
Базовый подход: CSS переменные и медиазапросы
Современный способ реализации начинается с CSS переменных. Они позволяют централизовано управлять цветовой схемой и легко переключаться между темами.
Определяем цветовые схемы
Создайте базовые переменные для светлой и тёмной тем в корневом элементе:
:root { --bg-primary: #ffffff; --text-primary: #000000; --accent-color: #2563eb;
} [data-theme="dark"] { --bg-primary: #1a1a1a; --text-primary: #ffffff; --accent-color: #3b82f6;
}
Учитываем системные предпочтения
Используйте медиазапрос prefers-color-scheme для автоматического определения системной темы:
@media (prefers-color-scheme: dark) { :root { --bg-primary: #1a1a1a; --text-primary: #ffffff; }
}
JavaScript для переключения и сохранения
Для интерактивного переключения тем потребуется JavaScript. Основные задачи: переключение data-атрибутов, сохранение выбора пользователя и синхронизация с системными настройками.
Базовый переключатель темы
Простая реализация переключателя с сохранением в localStorage:
const toggleTheme = () => { const currentTheme = document.documentElement.getAttribute('data-theme'); const newTheme = currentTheme === 'dark' ? 'light' : 'dark'; document.documentElement.setAttribute('data-theme', newTheme); localStorage.setItem('theme', newTheme);
};
Восстановление сохранённой темы
При загрузке страницы проверяем сохранённые предпочтения:
const savedTheme = localStorage.getItem('theme');
const systemPrefersDark = window.matchMedia('(prefers-color-scheme: dark)').matches; if (savedTheme) { document.documentElement.setAttribute('data-theme', savedTheme);
} else if (systemPrefersDark) { document.documentElement.setAttribute('data-theme', 'dark');
}
Типичные ошибки и как их избежать
Многие разработчики сталкиваются с одинаковыми проблемами при реализации тёмной темы.
Неполное тестирование цветового контраста
Тёмная тема — не просто инверсия цветов. Проверяйте контрастность текста по стандарту WCAG. Минимальный коэффициент контрастности для основного текста — 4.5:1.
Игнорирование системных изображений
Некоторые иконки и изображения могут плохо выглядеть в тёмной теме. Используйте CSS filter или готовьте отдельные assets для разных тем.
Мерцание при загрузке (FOUC)
Несохранённая тема может мелькать перед применением JavaScript. Решение — размещать скрипт восстановления темы в head или использовать cookies.
Чек-лист реализации
- Проверьте контрастность всех текстовых элементов
- Протестируйте на реальных устройствах с OLED-экранами
- Убедитесь, что переключение темы работает без задержек
- Проверьте совместимость с вашим JavaScript-фреймворком
- Протестируйте в разных браузерах и операционных системах
Когда тёмная тема действительно нужна
Не каждому сайту необходима тёмная тема. Она оправдана для: приложений с длительным использованием, сайтов с медиаконтентом, платформ для профессионалов. Для корпоративных сайтов или блогов достаточно системных предпочтений.
Реализация тёмной темы — это баланс между технической правильностью и пользовательским опытом. Начинайте с простой реализации на CSS переменных, добавляйте JavaScript для сохранения предпочтений и обязательно тестируйте на реальных устройствах.