var(--) валидно?
Представьте себе CSS-код:
body { --: honeydew; background-color: var(--);}Как вы думаете, сработает ли такой код в браузерах, и валидно ли имя кастомного свойства --?
Ответ: да, в июне 2021 код работает в Chrome, Firefox и Safari. Но имя переменной -- формально невалидно.
Текущий черновик спеки о кастомных свойствах зарезервировал кастомное свойство -- для будущего использования в CSS.
Объясню идею авторов спеки.
В CSS есть наследование: значения некоторых свойств (например, color или font-size), а также кастомных свойств передаются от родителя к детям:
body { color: rgb(51, 51, 51); --gap-size: 10px;}
p { /* color тоже будет rgb(51, 51, 51) */ padding: var(--gap-size); /* 10px */}Если эффект наследования нежелателен, его можно отменить ключевым словом initial:
body { color: rgb(51, 51, 51); --gap-size: 10px;}
p { color: initial; /* значение rgb(0, 0, 0) */ --gap-size: initial; /* значение «пустое» */}Если же хочется отменить все наследуемые свойства, но при этом не хочется их все перечислять, есть свойство all, которое обращается сразу ко всем возможным CSS-свойствам сразу:
body { color: rgb(51, 51, 51); font-size: 20px;}
p { all: initial; /* color: initial, то есть rgb(0, 0, 0) font-size: initial, то есть 16px */}У свойства all есть пара исключений: одно из них — оно не затрагивает кастомные свойства, для сброса их придётся перечислять все до единого:
body { --prop-1: 123; --prop-2: red; --prop-3: 10px;}
p { --prop-1: initial; --prop-2: initial; --prop-3: initial;}Так вот идея авторов спеки — сделать свойство с именем -- аналогом all только для кастомных свойств. Чтобы можно было написать:
body { --prop-1: 123; --prop-2: red; --prop-3: 10px;}
p { --: initial; /* --prop-1: initial, то есть значение «пустое» --prop-2: initial, то есть значение «пустое» --prop-3: initial, то есть значение «пустое» */}Несмотря на то, что это пока черновик спеки, решение было уже обсуждено рабочей группой, то есть скорее всего будет зафиксировано и в будущей рекомендации.
А пока что не используйте var(--), если вдруг эта мысль вам приходила в голову, так как оно вероятно перестанет работать.
Баг уже починен в Firefox Nightly, а в Chrome багрепорт пока только заведён.