Здесь необходимо рассмотреть две вещи: как пользовательские свойства работают и как они оцениваются с использованием var()
.
- Первая часть тривиальна, потому что пользовательское свойство ведет себя так же, как и любое другое свойство. Из спецификации мы можем прочитать:
Пользовательские свойства - это обычные свойства , поэтому они могут быть объявлены для любого элемента, разрешены с помощью , нормальные правила наследования и каскадирования , могут быть сделаны условными с помощью @media и других условных правила, могут быть использованы в атрибуте стиля HTML, могут быть прочитаны или установлены с помощью CSSOM и т. д.
Учитывая это, последнее пользовательское свойство, определенное в вашем случае, будет переопределять первое:
:root {
--size-of-font: 5rem;
}
.logo{
font-size: var(--size-of-font);
}
:root {
--size-of-font: 1.2rem; /* This one will win !*/
}
.outer {
font-size: var(--size-of-font);
cursor: pointer;
text-align: center;
}
- При использовании
var()
нам также необходимо учитывать некоторые правила, подобные определенным в той же спецификации:
На подставьте значение var () в значении свойства:
- Если пользовательское свойство названо первым аргументом в var ()
функция испорчена анимацией, а функция var () используется в
свойство анимации или одна из его длинных рук, обрабатывать пользовательские
свойство как имеющее начальное значение для остальной части этого алгоритма.
- Если значение пользовательского свойства названо первым аргументом
Функция var () - это что угодно, кроме начального значения, замените var ()
функция по значению соответствующего пользовательского свойства. В противном случае,
- если функция var () имеет запасное значение в качестве второго аргумента,
замените функцию var () запасным значением. Если есть какие-либо
Ссылки на var () в резервном варианте также заменяют их.
- В противном случае свойство, содержащее функцию var (), недопустимо при
время вычисленного значения
В нашей ситуации мы рассмотрим (2), потому что .logo
унаследует пользовательское свойство, определенное внутри :root
со значением 1.2rem
(не начальным значением).
Другими словами, оценка пользовательских свойств не учитывает порядок их появления в файле CSS. Он учитывает значение пользовательского свойства, которое разрешается как обычное свойство.
Вот еще один полезный вопрос, где вы можете получить больше деталей и больше примеров: Пользовательское свойство области CSS игнорируется, когда используется для вычисления var во внешней области видимости