Как интерпретируется `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.

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