Переменные в CSS: как и зачем их использовать
CSS-переменные — это мощный инструмент, который сделает ваш код более гибким и удобным для поддержки. С помощью CSS-переменных можно задать значения, которые легко переиспользовать в разных частях стилей. Это особенно удобно для цветов, отступов, шрифтов и других повторяющихся значений.
Как работают CSS-переменные
CSS-переменные задаются через префикс --
. Например, чтобы создать переменную для основного цвета, можно написать:
:root {
--main-color: #3498db;
}
Здесь :root
— это селектор, который применяется ко всему документу, так что переменная --main-color
будет доступна везде. Переменные в CSS работают подобно переменным в других языках программирования, что делает их особенно полезными для тех, кто работает с большими проектами.
Использование переменной
После того как переменная создана, ее можно использовать в любом месте в вашем CSS. Для этого используется функция var()
:
.button {
background-color: var(--main-color);
color: white;
padding: 10px 20px;
border-radius: 5px;
}
В данном случае background-color
кнопки будет использовать значение переменной --main-color
, заданной ранее. Если вы решите изменить цвет, то достаточно будет обновить значение переменной, и это сразу отобразится во всех местах, где она используется.
Локальные переменные
CSS-переменные можно задавать не только на уровне :root
, но и в других селекторах. Это позволяет создавать локальные переменные, которые будут действовать только в определенной области. Например:
.card {
--card-padding: 15px;
padding: var(--card-padding);
background-color: var(--main-color);
}
В этом примере --card-padding
доступна только внутри .card
, и при необходимости можно задать для других элементов свои значения.
Переменные и значения по умолчанию
CSS-переменные позволяют задавать значения по умолчанию. Если переменная не определена, можно использовать второе значение, передаваемое функции var()
:
.container {
color: var(--text-color, black);
}
Здесь, если --text-color
не задана, будет применен цвет black
как значение по умолчанию.
Анимации и переходы с CSS-переменными
CSS-переменные можно использовать не только для статических стилей, но и для создания анимаций и переходов. Это позволяет динамически менять цвета, отступы и другие параметры, придавая странице более интерактивный вид.
Плавные переходы
С помощью CSS-переменных и свойства transition
можно сделать плавные переходы между стилями. Например, при наведении на элемент можно изменить его цвет:
:root {
--button-bg: #3498db;
--button-hover-bg: #2980b9;
}
.button {
background-color: var(--button-bg);
color: white;
padding: 10px 20px;
border-radius: 5px;
transition: background-color 0.3s ease;
}
.button:hover {
background-color: var(--button-hover-bg);
}
При наведении на кнопку цвет фона плавно изменится, делая переход более мягким. Это возможно благодаря transition
, который использует CSS-переменные для смены значений.
Анимации с ключевыми кадрами
CSS-переменные можно применять и в анимациях с ключевыми кадрами (@keyframes
). Например, чтобы создать пульсирующую анимацию:
:root {
--pulse-color: #ff6347;
}
@keyframes pulse {
0% {
background-color: var(--pulse-color);
transform: scale(1);
}
50% {
background-color: #ff8566;
transform: scale(1.1);
}
100% {
background-color: var(--pulse-color);
transform: scale(1);
}
}
.pulse-button {
background-color: var(--pulse-color);
color: white;
padding: 10px 20px;
border-radius: 5px;
animation: pulse 1s infinite;
}
Эта кнопка будет «пульсировать», плавно увеличиваясь и изменяя цвет. CSS-переменная --pulse-color
задает основной цвет, и если его изменить, анимация автоматически подстроится под новое значение.
Изменение анимации с помощью JavaScript
Также можно управлять CSS-переменными с помощью JavaScript для более интерактивного поведения анимаций. Например, изменим скорость анимации при клике:
document.querySelector('.pulse-button').addEventListener('click', function() {
document.documentElement.style.setProperty('--animation-speed', '2s');
});
Теперь, если добавить переменную --animation-speed
в настройку анимации, можно легко менять ее скорость:
:root {
--animation-speed: 1s;
}
.pulse-button {
animation: pulse var(--animation-speed) infinite;
}
Преимущества использования CSS-переменных
- Удобство изменений. Чтобы изменить цветовую схему сайта, достаточно изменить значение переменной в одном месте.
- Сокращение дублирования. Переменные позволяют избежать повторений, делая код более чистым и читаемым.
- Гибкость. Переменные можно переопределять в разных частях сайта, подстраивая стили под разные страницы или секции.
- Совместимость с JavaScript. CSS-переменные легко управляются с помощью JavaScript, что делает их полезными в динамических проектах.
Как использовать CSS-переменные с JavaScript
Вы можете изменять значения CSS-переменных динамически с помощью JavaScript, что позволяет гибко управлять стилями в зависимости от действий пользователя. Например:
document.documentElement.style.setProperty('--main-color', '#e74c3c');
Здесь значение --main-color
изменится на красный цвет #e74c3c
, и все элементы, использующие эту переменную, автоматически обновятся.
Пример: темная и светлая темы с CSS-переменными
Создадим переключатель между светлой и темной темами. Для этого мы зададим две группы переменных для разных тем и будем изменять их с помощью JavaScript.
:root {
--bg-color: white;
--text-color: black;
}
.dark-theme {
--bg-color: black;
--text-color: white;
}
body {
background-color: var(--bg-color);
color: var(--text-color);
}
Теперь можно переключать классы с помощью JavaScript:
document.getElementById('theme-switch').addEventListener('click', function() {
document.body.classList.toggle('dark-theme');
});
Когда добавляется класс dark-theme
, цвета автоматически меняются благодаря переопределенным переменным. Это простой способ создать адаптивные темы для сайта без сложных перестроений CSS.
Дополнительные материалы
MDN Web Docs: «Использование переменных в CSS»
Подводим итоги
CSS-переменные — это удобный инструмент, который делает код гибким, удобным для изменений и масштабируемым. Они помогают сократить количество дублирующегося кода, делают возможным быструю смену тем и облегчают поддержку больших проектов. Если вы еще не используете CSS-переменные, попробуйте включить их в свой следующий проект, и вы оцените их преимущества.