Для тех, кто использовал препроцессор Sass для создания и применения переменных, есть хорошая новость - переменные теперь есть и в нативном CSS. Это значит, что нет лишней необходимости в препроцессоре и компиляции.
Как мы пользуемся переменными в Sass:
$primary-color: #333;
$secondary-color: #999;
.title {
color: $primary-color;
}
.subtitle {
color: $secondary-color;
}
А вот как можно эти же переменные обозначить в чистом CSS:
:root {
--primary-color: #333;
--secondary-color: #999;
}
.title {
color: var(--primary-color);
}
.subtitle {
color: var(--secondary-color);
}
И никакого препроцессора, никаких дополнительных установок, только обычный CSS из все. Красиво, не правда ли?
Синтаксис CSS-переменных
Объявление переменной должно содержать имя переменной (с двойным тире -- вначале) и его значение:
--black-color: #000;
Чтобы применить переменную, необходимо ее имя заключить в выражение var():
color: var(--black-color);
Область видимости CSS-переменных
Обозначение переменных может быть глобальным (что позволяет нам получить доступ к ним в любом месте) и локальным (переменные доступны только в пределах конкретного селектора):
:root {
/* обозначим переменную глобально */
--size: 18px;
/* это свойство будет работать везде */
font-size: var(--size); /* 18px */
}
.element {
/* обозначим переменную локально */
--color: chocolate;
/* это свойство будет работать только внутри селектора .element */
color: var(--color); /* chocolate */
}
Использование CSS-переменных
Кроме стандартного обозначения переменной с единичным значением, можно задавать сложное значение:
:root {
--margin: 10px auto 20px;
}
.section {
margin: var(--margin);
}
Переменная может быть использована в вычислениях с помощью calc():
:root {
--value: 12;
}
.section {
padding: calc(var(--value) * 1px) calc(var(--value) * 2px); /* 12px 24px */
}
Также переменную можно включать в значения других переменных:
:root {
--border-width: 4px;
--border: var(--border-width) solid #000;
}
.section {
border: var(--border);
}
Переопределение CSS-переменных
Допустим, мы имеем следующую разметку:
<p>Текст стандартного размера</p>
<div class="large-text">
<p>Текст измененного размера</p>
</div>
Мы можем переопределить глобальное значение переменной для определенного контекста:
:root {
--default-size: 16px;
}
p {
font-size: var(--default-size);
}
.large-text {
--default-size: 20px;
}
Запасное значение CSS-переменной (fallback)
Чтобы перестраховаться от случая, когда переменной не задано значение, используют запасное значение (fallback):
p {
color: var(--color, pink); /* Если у переменной --color нет значения, применится цвет 'pink' */
}
Использование CSS-переменных в JavaScript
Одно из огромных преимуществ переменных CSS над переменными Sass - к ним можно получить доступ через JavaScript.
Для любого из способов декларирования CSS-переменной:
<p style="--color: red"></p>
или
<style>
p { --color: red; }
</style>
мы можем использовать метод getComputedStyle():
const element = document.querySelector('p');
getComputedStyle(element).getPropertyValue('--color'); // => 'red'
Чтобы задать элементу переменную, используем setProperty():
const element = document.querySelector('p');
element.style.setProperty('--color', 'blue');
Получить значение глобальной переменной (которая расположена в :root):
getComputedStyle(document.documentElement).getPropertyValue('--color');
Комментарии (0)