Как указать var() в качестве значения одного из параметров (initial-value) @property для другого var()
Сидел значит, тренировался в css с новыми фишками. И уткнулся в проблему! Есть у меня 2 переменные:
--number: 0;
--time: 30;
Так вот для --time нужно задать пропсы
@property --number {
syntax: "<integer>";
inherits: false;
initial-value: var(--time);
}
Вот только не задача, если initial-value установить статически, те же 30 например, то все работает как надо, но если вместо числа задать переменную, то тут уже не работает. Пробовал костыль типа calc(var(--time) * 1), но нет, это так же не работает.
Как и почему?! Есть идеи?
Ответы (1 шт):
Начнём с самого начала, что такое initial-value?
The
initial-valueCSS descriptor is required when using the@propertyat-rule unless the syntax accepts any valid token stream. It sets the initial-value for the property.The value chosen as the
initial-valuemust parse correctly according to the syntax definition. Therefore, if syntax is<color>then the initial-value must be a validcolorvalue.
Перевод:
initial-valueэто CSS дескриптор, который требуется при использовании@propertyat-rule, только если синтаксис допусткает любой валидный (правильный) поток токенов. Оно назначает начальное значение для пропорции.Значение выбранное для
initial-valueдолжно быть пропарсено в соответствии с определением синтаксиса. То есть, если синтаксис<color>, значит начальное значение должно быть валидным (правильным)color(цветовым) значением.
То есть, если допустим мы введём <integer> для синтаксиса, то тогда initial-value должно быть типа <integer> (Пример: 10, 42 и т.п.), соответственно оно не может быть 42px, #c0ffee, 'foo' или чем то, что не целое число. Согласны? Продолжаем.
Теперь, что такое var()?
Функция CSS
var()используется для вставки значения кастомного свойства (также известного как "CSS-переменная") в другое свойство.
Как мы видим в представленном примере из MDN, синтаксис (тип) у функции var(), это <var()>:
<var()> =
var( <custom-property-name> , <declaration-value> )
Уже догадались? То есть, сама по себе функция var() имеет тип <var()>, соответственно, если в initial-value передать var(...), то сам initial-value будет типа <var()>, а как мы помним, если тип inital-value не совпадает с syntax, значит оператор @property не корректный. Бинго! Мы поняли в чём проблема :)
Теперь когда мы поняли что нужно вводить, пишем соответствующий код:
@property --number {
syntax: "<var()>";
inherits: false;
initial-value: var(--time);
}
Но так как <var()> может быть чем угодно, это лишает смысла весь код.
Материал по теме: