Функция CSS `var()`
Базовая поддержка Широко доступна
Эта функция хорошо зарекомендовала себя и работает на многих устройствах и во многих версиях браузеров. Она доступна во всех браузерах с апреля 2017 года.
var() CSS функцию можно использовать для вставки значения пользовательского свойства (иногда называемого «переменной CSS») вместо любой части значения другого свойства.
Функцию var() нельзя использовать в именах свойств, селекторах или где-либо ещё, кроме значений свойств. (Обычно это приводит к синтаксической ошибке или к значению, смысл которого не связан с переменной.)
Попробуйте
border-color: var(--color-a);
border-color: var(--color-b);
border-color: var(--color-c);
<section class="default-example" id="default-example">
<div id="example-element">
Three color options have been set on the :root use these to change the
border color.
</div>
</section>
:root {
--color-a: pink;
--color-b: green;
--color-c: rebeccapurple;
}
#example-element {
border: 10px solid black;
padding: 10px;
}
Синтаксис
/* Basic usage */ var(--custom-prop); /* With fallback */ var(--custom-prop,); /* empty value as fallback */ var(--custom-prop, initial); /* initial value of the property as fallback */ var(--custom-prop, red); var(--custom-prop, var(--default-value)); var(--custom-prop, var(--default-value, red));
Первый аргумент функции — имя пользовательского свойства, значение которого нужно подставить. Необязательный второй аргумент служит резервным значением. Оно используется, если у указанного пользовательского свойства нет допустимого значения — того, что спецификация называет гарантированно недопустимым значением. На практике это означает, что резервное значение используется, когда:
- Пользовательское свойство не объявлено в правиле, применяемом к элементу, и не зарегистрировано (с помощью
@property) с дескрипторомinitial-value. - Для пользовательского свойства задано ключевое слово
initial, и оно не является зарегистрированным пользовательским свойством сinitial-value. Если задать для незарегистрированного пользовательского свойства значениеinitial, оно сбросится к гарантированно недопустимому значению. - Объявленное значение пользовательского свойства недопустимо на этапе вычисления значения — например, из-за циклической зависимости между пользовательскими свойствами, — а свойство не зарегистрировано или зарегистрировано с универсальным синтаксисом
*.
Если пользовательское свойство зарегистрировано с помощью @property с неуниверсальным синтаксисом syntax и initial-value, это начальное значение подставляется, когда не применяется ни одно другое объявление. В этом случае резервное значение не используется.
Другие глобальные ключевые слова CSS — inherit, unset, revert, revert-layer и revert-rule — при задании в качестве значения пользовательского свойства ведут себя так же, как и для любого другого свойства. Они могут разрешить пользовательское свойство в унаследованное или ранее полученное в результате каскадирования значение, а не в гарантированно недопустимое значение, поэтому не обязательно активируют резервное значение. Например, если в одном слое каскада для --foo задано значение revert-layer, а в другом — цвет, var(--foo) разрешается в значение цвета, а не в резервное значение.
Синтаксис резервного значения, как и синтаксис пользовательских свойств, допускает запятые. Например, var(--foo, red, blue) задаёт резервное значение red, blue; то есть всё, что находится между первой запятой и концом функции, считается резервным значением.
Значения
-
<custom-property-name> - Имя пользовательского свойства, представленное идентификатором, который начинается с двух дефисов. Пользовательские свойства предназначены исключительно для авторов и пользователей; CSS никогда не придаст им иного значения, кроме описанного здесь.
-
<declaration-value> -
Резервное значение пользовательского свойства, используемое, когда указанное пользовательское свойство имеет гарантированно недопустимое значение (условия, при которых это происходит, описаны в разделе «Синтаксис» выше). Это значение может содержать любые символы, кроме некоторых символов со специальным значением, таких как символы новой строки, незакрытые закрывающие скобки, то есть
),]или}, точки с запятой верхнего уровня и восклицательные знаки. Резервное значение само может быть пользовательским свойством с синтаксисомvar(). Если резервное значение не указано, а пользовательское свойство имеет гарантированно недопустимое значение, функцияvar()разрешается в недопустимое значение.Примечание:
var(--a,)— допустимая запись. Она указывает, что если пользовательское свойство--aимеет гарантированно недопустимое значение, вместоvar()ничего подставлять не нужно.
Формальный синтаксис
<var()> =
var( <custom-property-name> , <declaration-value>? )
Примеры
Использование пользовательского свойства, заданного в :root
CSS
:root {
--main-bg-color: pink;
}
body {
background-color: var(--main-bg-color);
}
Результат
Здесь значение свойства background-color задано с помощью пользовательского свойства --main-bg-color. Поэтому цвет фона элемента body в HTML будет розовым.
Использование пользовательского свойства до того, как оно задано
CSS
body {
background-color: var(--main-bg-color);
}
:root {
--main-bg-color: pink;
}
Результат
В этом примере цвет фона элемента body в HTML будет розовым, даже если пользовательское свойство задано позже.
Использование пользовательского свойства, заданного в другом файле
HTML
<!doctype html>
<html lang="en-US">
<head>
<meta charset="utf-8" />
<link rel="stylesheet" href="1.css" />
<link rel="stylesheet" href="2.css" />
</head>
<body></body>
</html>
CSS
/* 1.css */
body {
background-color: var(--main-bg-color);
}
/* 2.css */
:root {
--main-bg-color: pink;
}
Результат
В этом случае цвет фона элемента body в HTML будет розовым, даже если пользовательское свойство объявлено в другом файле.
Пользовательские свойства с резервными значениями на случай, если свойство не задано
HTML
<div class="component"> <h1 class="header">Header</h1> <p class="text">Text</p> </div>
CSS
/* In the component's style: */
.component .header {
/* header-color isn't set, and so remains blue, the fallback value */
color: var(--header-color, blue);
}
.component .text {
color: var(--text-color, black);
}
/* In the larger application's style: */
.component {
--text-color: #008800;
}
Результат
Поскольку --header-color не задано, текст «Header» будет синим — это резервное значение.
Использование пользовательского свойства в качестве резервного значения
CSS
:root {
--backup-bg-color: teal;
}
body {
background-color: var(--main-bg-color, var(--backup-bg-color, white));
}
Результат
Поскольку --main-bg-color не задано, свойство background-color элемента body получит резервное значение --backup-bg-color, которое соответствует бирюзовому цвету.
Недопустимые значения
Функции var() могут разрешаться в недопустимые значения, если:
- Пользовательское свойство не определено, и резервное значение не указано.
- Пользовательское свойство определено, но его значение недопустимо для свойства, в котором оно используется.
В таком случае свойство считается имеющим значение unset. Это происходит потому, что переменные не могут «завершить обработку с ошибкой на раннем этапе», как это могут сделать другие синтаксические ошибки. К тому времени, когда пользовательский агент обнаруживает недопустимое значение свойства, остальные значения, полученные в результате каскадирования, уже отброшены.
Например:
HTML
<p class="p1">Undefined variable</p> <p class="p2">Invalid variable</p> <p class="p3">Invalid literal color</p>
CSS
p {
color: red;
}
.p1 {
color: var(--invalid-color);
}
.p2 {
--invalid-color: 20px;
color: var(--invalid-color);
}
.p3 {
color: 20px;
}
Результат
Обратите внимание: абзацы с var() сбрасываются до чёрного цвета по умолчанию, а абзац с недопустимым буквальным значением цвета остаётся красным, поскольку объявление color: 20px просто игнорируется.
Спецификации
| Спецификация |
|---|
| Пользовательские свойства CSS для каскадируемых переменных, модуль уровня 1 # using-variables |
Совместимость с браузерами
| Настольные компьютеры | Мобильные устройства | |||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Opera | Safari | Chrome для Android | Firefox для Android | Opera для Android | Safari для iOS | Samsung Internet | WebView для Android | WebView для iOS | |
var |
49 |
15 |
31 |
36 |
9.1 |
49 |
31 |
36 |
9.3 |
5.0 |
50 |
9.3 |
См. также
-
env(…)— доступные только для чтения переменные окружения, контролируемые пользовательским агентом. - Использование пользовательских свойств CSS (переменных)
-
@property— директива at-rule - Регистрация пользовательских свойств CSS
- Пользовательские свойства CSS для каскадируемых переменных — модуль
© 2005–2025 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/CSS/Reference/Values/var