Переменные CSS с арифметическими операциями не работают в сокращенных свойствах?

Пожалуйста, помогите мне выяснить, почему арифметическая операция в переменной CSS нарушает код.

Я начал с простого файла CSS с одним правилом:

html {
  font: 16px/32px Arial;
}

В браузерах это работает как написано: размер шрифта 16px, высота строки 32px, а сам шрифт Arial.

Затем я добавил переменные:

html {
  --default-font-size: 16px;
  --default-line-height: var(--default-font-size);
  font: var(--default-font-size)/var(--default-line-height) Arial;
}

Это тоже работает; думал, что высота строки составляет 16 пикселей, потому что я сделал его равным размеру шрифта.

Но когда я умножил второе значение, объявление шрифта перестало работать:

html {
  --default-font-size: 16px;
  --default-line-height: var(--default-font-size) * 2;
  font: var(--default-font-size)/var(--default-line-height) Arial;  /* not working! */
}

Все свойства font-size, line-height, а также font-family установлены по умолчанию в браузере.

Если я разделю font Сокращенное свойство на три различных сокращенных свойства, код снова работает нормально:

html {
  --default-font-size: 16px;
  --default-line-height: var(--default-font-size) * 2;
  font-size: var(--default-font-size);
  line-height: var(--default-line-height);
  font-family: Arial;
}

Что не так с предыдущим примером кода и есть ли способ заставить его работать, не разбивая на свойства longhand?

1 ответ

Решение

Вам нужно использовать calc как это:

html {
  --default-font-size: 16px;
  --default-line-height: calc(var(--default-font-size) * 2);
  font: var(--default-font-size)/var(--default-line-height) Arial;
}

--default-line-height заменяется в font свойство перед оценкой, поэтому у вас есть что-то вроде этого (недействительно):

font: var(--default-font-size)/var(--default-font-size) * 2 Arial;

С помощью calc Вы оцениваете выражение, и у вас есть правильный синтаксис. Даже ваш третий пример не сработает. CSS не распознает знак умножения, так как он должен использоваться внутри calc

p {
  --default-font-size: 16px;
  --default-line-height: calc(var(--default-font-size) * 4);
  font: var(--default-font-size)/var(--default-line-height) Arial;
}
<p>lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum</p>

Другие вопросы по тегам