Как упоминалось в моем комментарии, мое понимание переменных CSS заключается в том, что переменная преобразуется в ее фактическое значение с помощью UA. Это происходит после того, как компилятор Less скомпилирует файл, и поэтому он не будет знать, какое фактическое значение содержит переменная CSS.
Для компилятора значение @length
равно только var(--length)
. Поскольку это не число, во время компиляции возникает ошибка, указывающая, что математическая операция выполняется с недопустимым типом.
OperationError: Операция с недопустимым типом в строке 4, столбце 3:
Один из способов исправить это — заставить компилятор Less выводить имя переменной как есть и добавлять к нему множитель (например, конкатенация строк). Тогда управление останется за UA.
Но поскольку все математические операции CSS должны выполняться внутри функции calc()
, все это должно быть обернуто внутри нее. Таким образом, приведенный ниже код будет работать нормально.
h1 {
--length: 40px;
@length: var(--length);
@length2: ~"calc(@{length} * 2)";
line-height: @length;
padding: @length2;
border: 5px solid tomato;
}
Или даже приведенного ниже будет достаточно, если --strict-math
включен во время компиляции:
h1 {
--length: 40px;
@length: var(--length);
@length2: calc(@length * 2);
line-height: @length;
padding: @length2;
border: 5px solid tomato;
}
Вышеприведенный код при компиляции создает вывод, аналогичный приведенному в примере 11 спецификаций и так что это должен быть достаточно хороший способ сделать это :)
... Однако обратите внимание, что calc()
можно использовать для действительного достижения того же самого, например:
.foo {
--gap: 20;
margin-top: calc(var(--gap) * 1px);
}
Функции var() заменяются во время вычисляемого значения...
person
Harry
schedule
01.03.2016
var(--length)
преобразуется в свое значение с помощью UA, что происходит после того, как компилятор Less компилирует код в CSS. Во время компиляции значение@length
равно толькоvar(--length)
, которое не является числом и, следовательно, приводит к ошибке компиляции. Попробуйте сделать это как@length2: @length ~"* 2";
и посмотрите, получится ли. Я не могу проверить, потому что мой браузер старый. Или даже@length2: ~"calc(@{length} * 2)";
. - person Harry   schedule 01.03.2016var(--length) * 2;
- person Danield   schedule 01.03.2016calc()
обернутым вокруг? Хотя это всего лишь догадки. Можете ли вы применять математические операции к переменным CSS без использования препроцессора? - person Harry   schedule 01.03.2016