CSS-правило @property
Базовая поддержка Недавно стало доступно
Эта функция работает на последних устройствах и в последних версиях браузеров. Она может не работать на старых устройствах или в старых версиях браузеров. Она поддерживается браузерами с июля 2024 года.
@property CSS правило at-rule используется для явного определения пользовательских свойств CSS, что позволяет проверять и ограничивать типы значений свойств, задавать значения по умолчанию и определять, может ли пользовательское свойство наследовать значения.
Примечание: Метод JavaScript registerProperty() эквивалентен правилу at-rule @property.
Синтаксис
@property --canBeAnything {
syntax: "*";
inherits: true;
}
@property --rotation {
syntax: "<angle>";
inherits: false;
initial-value: 45deg;
}
@property --defaultSize {
syntax: "<length> | <percentage>";
inherits: true;
initial-value: 200px;
}
Имя пользовательского свойства представляет собой <dashed-ident>, которое начинается с --, за которым следует допустимый идентификатор, определяемый пользователем. Регистр символов имеет значение.
Дескрипторы
-
syntax - Строка, описывающая допустимые типы значений для зарегистрированного пользовательского свойства.
-
inherits - Логическое значение, определяющее, наследует ли по умолчанию регистрация пользовательского свойства, заданная с помощью
@property. -
initial-value - Значение, задающее начальное значение свойства.
Описание
Правило at-rule @property входит в набор API CSS Houdini. Оно позволяет разработчикам явно определять пользовательские свойства CSS, что позволяет проверять и ограничивать типы значений свойств, задавать значения по умолчанию и определять, может ли пользовательское свойство наследовать значения.
Правило @property позволяет регистрировать пользовательские свойства непосредственно в таблицах стилей, не используя JavaScript. Допустимые правила @property создают зарегистрированные пользовательские свойства, что дает тот же результат, что и вызов registerProperty() с эквивалентными параметрами.
Чтобы правило @property было допустимым, должны выполняться следующие условия:
- Правило
@propertyдолжно содержать оба дескриптора:syntaxиinherits. Если отсутствует хотя бы один из них, все правило@propertyсчитается недопустимым и игнорируется. - Значением
syntaxможет быть имя типа данных (например,<color>,<length>или<number>и т. д.) с множителями (+для списка значений, разделенных пробелами, или#для списка значений, разделенных запятыми) и комбинаторами (|для одного из нескольких типов данных), пользовательский идентификатор или универсальное определение синтаксиса (*), означающее, что синтаксис может представлять собой любую допустимую последовательность токенов. Значение является<string>. Поэтому оно должно быть заключено в кавычки. - Дескриптор
initial-valueнеобязателен, если значение дескриптораsyntax— универсальное определение синтаксиса (syntax: "*"). Если дескрипторinitial-valueобязателен, но не указан, все правило@propertyсчитается недопустимым и игнорируется. - Если значение дескриптора
syntaxне является универсальным определением синтаксиса, значение дескриптораinitial-valueдолжно быть вычислительно независимым. Это означает, что значение можно преобразовать в вычисленное значение, не зависящее от других значений, за исключением «глобальных» определений, независимых от CSS. Например,10pxявляется вычислительно независимым — при преобразовании в вычисленное значение оно не меняется.2inтакже допустимо, поскольку1inвсегда эквивалентно96px. Однако3emнедопустимо, поскольку значениеemзависит отfont-sizeродительского элемента. - Неизвестные дескрипторы недопустимы и игнорируются, но не делают правило
@propertyнедопустимым.
Если с одним и тем же именем задано несколько допустимых правил @property, применяется последнее в порядке таблицы стилей. Если пользовательские свойства с одинаковым именем зарегистрированы с помощью @property в CSS и CSS.registerProperty() в JavaScript, применяется регистрация JavaScript.
Формальный синтаксис
Примеры
Базовый пример
В этом примере мы используем правило at-rule @property, чтобы объявить два пользовательских свойства, а затем используем их в объявлениях стилей.
HTML
<p>Hello world!</p>
CSS
@property --myColor {
syntax: "<color>";
inherits: true;
initial-value: rebeccapurple;
}
@property --myWidth {
syntax: "<length> | <percentage>";
inherits: true;
initial-value: 200px;
}
p {
background-color: var(--myColor);
width: var(--myWidth);
color: white;
}
Результат
Ширина абзаца должна составлять 200px, фон должен быть фиолетовым, а текст — белым.
Анимация значения пользовательского свойства
В этом примере мы определяем пользовательское свойство с именем --progress с помощью @property: оно принимает значения <percentage>, а его начальное значение — 25%. Мы используем --progress, чтобы задать положение цветовых маркеров в linear-gradient(), определив, где заканчивается зеленый цвет и начинается черный. Затем мы анимируем значение --progress до 100% за 2,5 секунды, создавая эффект анимированной полосы прогресса.
HTML
<div class="bar"></div>
CSS
@property --progress {
syntax: "<percentage>";
inherits: false;
initial-value: 25%;
}
.bar {
display: inline-block;
--progress: 25%;
width: 100%;
height: 5px;
background: linear-gradient(
to right,
#00d230 var(--progress),
black var(--progress)
);
animation: progressAnimation 2.5s ease infinite;
}
@keyframes progressAnimation {
to {
--progress: 100%;
}
}
Результат
Спецификации
Совместимость с браузерами
| Компьютеры | Мобильные устройства | |||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Opera | Safari | Chrome для Android | Firefox для Android | Opera для Android | Safari для iOS | Samsung Internet | WebView для Android | WebView для iOS | |
property |
85 |
85 |
128 |
71 |
16.4 |
85 |
128 |
60 |
16.4 |
14.0 |
85 |
16.4 |
inherits |
85 |
85 |
128 |
71 |
16.4 |
85 |
128 |
60 |
16.4 |
14.0 |
85 |
16.4 |
initial-value |
85 |
85 |
128 |
71 |
16.4 |
85 |
128 |
60 |
16.4 |
14.0 |
85 |
16.4 |
syntax |
85 |
85 |
128 |
71 |
16.4 |
85 |
128 |
60 |
16.4 |
14.0 |
85 |
16.4 |
См. также
var()- Пользовательские свойства (
--*) - Регистрация пользовательских свойств CSS
- Модуль CSS Properties and Values API
- Документация по API CSS Properties and Values
- Руководство Использование пользовательских свойств 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/At-rules/@property