CSS-переменные
↑ 1.3 CSS и SASS · ← Предыдущая · → Следующая
Зачем это на собесе
Custom properties — основа темизации и дизайн-токенов; спрашивают отличие от переменных SASS.
Объяснение
:root {
--color-bg: #ffffff;
--color-text: #1a1a1a;
--space: 8px;
--radius: 8px;
}
[data-theme="dark"] { --color-bg: #121212; --color-text: #eaeaea; }
.card {
background: var(--color-bg);
color: var(--color-text, black); /* значение по умолчанию */
padding: calc(var(--space) * 2);
border-radius: var(--radius);
}Свойства:
- Наследуются и подчиняются каскаду; можно переопределять на любом уровне (в компоненте, теме).
- Работают во время выполнения: меняются JS (
el.style.setProperty("--x", "10px")), реагируют на media/theme. @propertyрегистрирует тип и начальное значение → анимируемые переменные.
@property --angle { syntax: "<angle>"; inherits: false; initial-value: 0deg; }
.spin { background: conic-gradient(from var(--angle), red, blue); transition: --angle .5s; }| CSS-переменные | SASS-переменные |
|---|---|
| Живут в браузере, динамические, каскадные | Компилируются, значения фиксируются в сборке |
| Темизация, состояния, JS | Вычисления, циклы, миксины |
| Нельзя использовать в именах свойств/media (до контейнеров) | Можно в любом месте препроцессора |
Практика: дизайн-токены (--color-*, --space-*, --font-*) и семантические алиасы (--color-danger).
Нюансы и подводные камни
- Циклические ссылки и неопределённые переменные делают значение недействительным (используйте fallback).
- Переменные нельзя использовать в
@mediaусловиях напрямую. - Слишком много слоёв алиасов усложняют поиск.
- Изменение переменной на
:rootвызывает пересчёт стилей во всём документе.
Практика
- Сделайте светлую и тёмную темы через
data-themeи токены. - Управляйте цветом акцента через JS-переменную.
- Зарегистрируйте
@propertyи анимируйте градиент.
Вопросы с ответами
Чем CSS-переменные отличаются от SASS-переменных?
CSS-переменные живут в рантайме и наследуются, SASS-переменные подставляются при компиляции.
Зачем
@property?Задаёт тип и значение по умолчанию, позволяя анимировать пользовательские свойства.