CSS Variables (Custom Properties)
CSS Variables (также известные как Custom Properties) — это способ хранения значений, которые можно переиспользовать по всему CSS-коду. Они позволяют создавать более гибкие и поддерживаемые стили.
Что такое CSS Variables?
CSS переменные — это пользовательские свойства, которые можно определить один раз и использовать многократно. Они работают по принципу наследования и могут быть переопределены в любом элементе.
Синтаксис
/* Определение переменной */
:root {
--primary-color: #3498db;
--font-size: 16px;
--spacing: 20px;
}
/* Использование переменной */
.button {
background-color: var(--primary-color);
font-size: var(--font-size);
padding: var(--spacing);
}
Преимущества CSS Variables
- Централизованное управление: Все значения хранятся в одном месте (обычно в
:root), что упрощает изменение темы или стилей. - Динамическое изменение: Переменные можно изменять через JavaScript, что позволяет создавать интерактивные темы.
- Наследование: Переменные наследуются от родительских элементов, что позволяет создавать контекстные стили.
- Fallback значения: Можно указать резервное значение, если переменная не определена.
Пример с fallback
.button {
background-color: var(--primary-color, #3498db);
/* Если --primary-color не определена, используется #3498db */
}
Область видимости переменных
CSS переменные имеют область видимости, основанную на каскаде:
/* Глобальные переменные */
:root {
--main-color: blue;
}
/* Переменные для конкретного компонента */
.card {
--card-padding: 20px;
padding: var(--card-padding);
}
/* Переменные можно переопределять */
.card.dark {
--main-color: darkblue;
background-color: var(--main-color);
}
Работа с CSS Variables в JavaScript
CSS переменные можно изменять динамически через JavaScript:
// Получение значения переменной
const root = document.documentElement;
const primaryColor = getComputedStyle(root).getPropertyValue('--primary-color');
// Установка значения переменной
root.style.setProperty('--primary-color', '#ff0000');
// Пример: изменение темы
function toggleTheme() {
const root = document.documentElement;
const currentTheme = root.style.getPropertyValue('--theme');
if (currentTheme === 'dark') {
root.style.setProperty('--bg-color', '#ffffff');
root.style.setProperty('--text-color', '#000000');
root.style.setProperty('--theme', 'light');
} else {
root.style.setProperty('--bg-color', '#1a1a1a');
root.style.setProperty('--text-color', '#ffffff');
root.style.setProperty('--theme', 'dark');
}
}
Практический пример: Темная/светлая тема
:root {
--bg-color: #ffffff;
--text-color: #000000;
--primary-color: #3498db;
}
[data-theme="dark"] {
--bg-color: #1a1a1a;
--text-color: #ffffff;
--primary-color: #5dade2;
}
body {
background-color: var(--bg-color);
color: var(--text-color);
transition: background-color 0.3s, color 0.3s;
}
.button {
background-color: var(--primary-color);
color: var(--text-color);
}
<button onclick="toggleTheme()">Переключить тему</button>
function toggleTheme() {
const html = document.documentElement;
const currentTheme = html.getAttribute('data-theme');
html.setAttribute('data-theme', currentTheme === 'dark' ? 'light' : 'dark');
}
Использование calc() с переменными
CSS переменные можно комбинировать с функцией calc():
:root {
--base-size: 16px;
--spacing: 20px;
}
.container {
font-size: var(--base-size);
padding: calc(var(--spacing) * 2);
margin: calc(var(--spacing) / 2);
}
Ограничения
- Нет поддержки в старых браузерах: IE11 не поддерживает CSS переменные.
- Нельзя использовать в медиа-запросах напрямую: Переменные работают только внутри селекторов.
- Нет валидации типов: CSS не проверяет, что значение переменной соответствует ожидаемому типу.
Совет:
Используйте CSS переменные для создания гибких тем, централизованного управления стилями и динамического изменения внешнего вида приложения. Они особенно полезны в современных фреймворках и библиотеках компонентов.