Как интерпретируется `outline: наследовать 0`?
Согласно w3schools, синтаксис outline
является:outline: <color> <style> <width>;
и любой из трех может отсутствовать.
И значение inherit
является допустимым значением либо трех, либо одного outline: inherit
означает, что он должен наследовать все три.
Я спрашиваю об этом, потому что я работаю над оптимизатором свойств для минификатора CSS. По вышеуказанной ссылке,outline: inherit none 3px
эквивалентно outline: inherit 3px
, а такжеoutline: invert inherit 3px
также эквивалентно outline: inherit 3px
,
но результат кажется слишком неоднозначным.
Так что вопрос в том, как браузеры интерпретируют outline: inherit 0px
? Они назначают inherit
цвет или стиль?
2 ответа
Это игнорируется. Это текущая практика браузера и предполагаемый принцип в CSS: для краткой записи, такой как outline
ключевое слово inherit
допускается в качестве значения (наследуя все подчиненные свойства), но не в сочетании с любым другим значением. Причина довольно очевидна: в противном случае значение не будет иметь однозначной интерпретации. В стоимости inherit 0
, Значение 0
может быть только значение для outline-width
, но inherit
может быть значением для outline-style
или же outline-color
,
Этот принцип упоминается в приложении к спецификации CSS 2.1 на C.3.1. Теоретически, приложение C представляет собой информативное описание изменений, а не нормативное, и здесь оно не отражает фактических изменений. То есть, это было глупо: намерение было описано, но нормативно CSS 2.1 не имеет этого принципа и будет учитывать outline: inherit 0
как действительный (но W3C CSS Validator отклоняет его). Ср Действителен ли этот синтаксис шрифта: сокращение свойства? (Мое чтение спецификации говорит, что да, но половина моих установленных браузеров не согласна.) (Которая имеет дело с той же проблемой, касающейся font
сокращенная).
Если вы хотите все outline
свойства должны быть унаследованы, но ширина установлена в ноль (что было бы несколько странно), вам нужно два объявления
outline: inherit;
outline-width: 0;
Следует отметить, что определение порядка в w3schools не является полным. Все следующие действительны
outline: <color> <style> <width>
outline: <color> <width> <style>
outline: <width> <style> <color>
outline: <width> <color> <style>
outline: <style> <width> <color>
outline: <style> <color> <width>
Потому что порядок не имеет значения. Это, в свою очередь, становится причиной
outline: inherit none 3px
стать недействительным, поскольку
3px
может означать
color
также.
Аналогично
outline: inherit 0px
эквивалентно
outline: inherit initial 0px
и таким образом может относиться к
outline-color: 0px
.