Содержание
Что такое CSS-переменные
CSS custom properties — именованные значения, которые ты объявляешь один раз и используешь везде. Если значение меняется в одном месте — меняется везде. (Если только начинаешь с современным CSS — посмотри также Flexbox vs Grid.)
/* Объявляем переменные в :root — они глобальны */
:root {
--bg: #ffffff;
--text: #111111;
--accent: #0066cc;
}
/* Используем */
body {
background: var(--bg);
color: var(--text);
}
Добавляем тёмную тему
Создаём второй набор переменных. Они переопределяют светлые, когда на html стоит атрибут data-theme="dark".
:root {
--bg: #ffffff;
--bg-card: #f5f5f5;
--text: #111111;
--text-muted: #666666;
--border: rgba(0,0,0,0.1);
}
[data-theme="dark"] {
--bg: #0a0a0f;
--bg-card: #111118;
--text: #e8e8f0;
--text-muted: #6b6b80;
--border: rgba(255,255,255,0.07);
}
Переключение через JavaScript
function toggleTheme() {
const html = document.documentElement;
const isDark = html.getAttribute('data-theme') === 'dark';
html.setAttribute('data-theme', isDark ? 'light' : 'dark');
// Сохраняем выбор пользователя
localStorage.setItem('theme', isDark ? 'light' : 'dark');
}
// Восстанавливаем тему при загрузке
const saved = localStorage.getItem('theme');
if (saved) document.documentElement.setAttribute('data-theme', saved);
Автоматически по системным настройкам
Можно вообще не делать кнопку — CSS сам подхватит системную тему (тот же подход media queries, что и в адаптивном дизайне):
@media (prefers-color-scheme: dark) {
:root {
--bg: #0a0a0f;
--text: #e8e8f0;
}
}
💡 Можно комбинировать: по умолчанию — системная тема, но пользователь может переключить вручную. Проверяй сначала
localStorage, потомprefers-color-scheme.
Плавный переход
body {
transition: background 0.2s, color 0.2s;
}
⚠️ Не вешай
transition: all— это замедлит анимации. Только на конкретные свойства:background,color,border-color.
Обсуждение
Пока нет комментариев. Будьте первым.