Ответ 1
Грамматика свойства относится к синтаксису значения указанного свойства в объявлении CSS. Большинство свойств принимают одно значение, но некоторые свойства принимают несколько значений в заданных порядках, например box-shadow
и background-repeat
, а также сокращенные свойства. Эта грамматика обычно рассматривается непосредственно в строке "Значение:", но может быть разработана в прозе, например, если свойство принимает список таких сложных значений, разделенных запятыми.
Например, грамматика уровень 3 background
сокращенно определяется как ноль или более <bg-layer>
, за которой следует один <final-bg-layer>
, где
<bg-layer> = <bg-image> || <position> [ / <bg-size> ]? || <repeat-style> || <attachment> || <box> || <box>
<final-bg-layer> = <bg-image> || <position> [ / <bg-size> ]? || <repeat-style> || <attachment> || <box> || <box> || <'background-color'>
Два значения <box>
описываются следующим образом:
Если присутствует одно значение
<box>
, оно устанавливает для этого значения "background-origin" и "background-clip". Если присутствуют два значения, то первый устанавливает фоновое происхождение и второй фоновый клип.
И разделители ||
между каждым компонентом означают, что один или несколько из этих компонентов могут возникать и в любом порядке. В случае background
заметите, что background-position
и background-size
не имеют ||
между ними; это означает два свойства должны появиться вместе (и для background-size
, которые должны быть указаны, должен быть включен background-position
).
Например, следующие два объявления действительны и эквивалентны:
background: url(see-through.png) center / 100% no-repeat fixed padding-box red;
background: red url(see-through.png) fixed padding-box no-repeat center / 100%;
Никакая спецификация не определяет термин "канонический порядок", но CSSOM делает несколько ссылок на него в контексте сериализации. Например, в разделе раздел 5.4.3 говорится:
указанный порядок для объявлений такой же, как указано, но с сокращенными свойствами, расширенными в их свойства longhand, в каноническом порядке.
Значения этих длинных строк сериализуются для getPropertyValue()
, setProperty()
, setPropertyValue()
и setPropertyPriority()
, все из которых также относятся к "каноническому порядку".
Не каждое свойство имеет канонический порядок, поскольку, как упоминалось выше, большинство свойств принимают только одно значение; строка "Канонический порядок:" присутствует в одиночной таблице propdef в css-module-bikeshed просто потому, что она является шаблоном. Кроме того, CSSOM, по-видимому, подразумевает, что только сокращенные свойства имеют канонический порядок.
Основываясь на моем понимании соответствующих спецификаций, когда канонический порядок стенографического свойства определяется как грамматика этого значения, он просто означает, что его длинные строки должны быть сериализованы в порядке, определяемом грамматикой. Таким образом, приведенные выше две сокращенные объявления должны быть сериализованы в том же порядке, что и следующий набор деклараций:
background-image: url(see-through.png);
background-position: center;
background-size: 100%;
background-repeat: no-repeat;
background-attachment: fixed;
background-origin: padding-box;
background-clip: padding-box;
background-color: red;
(Интересно отметить, что примеры отображения короткошерстных ссылок, приведенные в модуле "Фоны", не соответствуют этому порядку.)