Синтаксис определения значений
Синтаксис определения значений CSS, формальная грамматика, используется для определения набора допустимых значений для свойства или функции CSS. В дополнение к этому синтаксису набор допустимых значений может быть дополнительно ограничен семантическими ограничениями (например, для числа, которое должно быть строго положительным).
Синтаксис определения описывает, какие значения разрешены и взаимодействия между ними. Компонент может быть ключевым словом, некоторыми символами, рассматриваемыми как литерал, или значением заданного типа данных CSS или другого свойства CSS.
Типы значений компонентов
Ключевые слова
Общие ключевые слова
Ключевое слово с предопределенным значением появляется буквально, без кавычек. Например: auto, smaller, или ease-in.
Частный случай inherit, initial и unset
Все свойства CSS принимают ключевые слова inherit, initial, и unset. Они не показаны в определении значения и неявно определены.
Литералы
В CSS несколько символов могут появляться самостоятельно, например, косая черта (/) или запятая (,), и используются в определении свойства для разделения его частей. Запятая часто используется для разделения значений в перечислениях или параметров в функциях, похожих на математические; косая черта часто разделяет части значения, которые семантически различны, но имеют общий синтаксис. Обычно косая черта используется в сокращенных свойствах для разделения компонентов одного типа, но принадлежащих различным свойствам.
Оба символа отображаются буквально в определении значения.
Типы данных
Базовые типы данных
Некоторые типы данных используются во всем CSS и определяются один раз для всех значений в спецификации. Называемые базовыми типами данных, они представлены своим именем, окружённым символами < и >: <angle>, <string>, …
Нетерминальные типы данных
Менее распространенные типы данных, называемые нетерминальными типами данных, также окружены < и >.
Нетерминальные типы данных бывают двух видов:
- типы данных, использующие то же имя свойства, заключённые в кавычки. В этом случае тип данных использует тот же набор значений, что и свойство. Они часто используются в определении сокращенных свойств.
- типы данных, не использующие то же имя свойства. Эти типы данных очень похожи на базовые типы данных. Они отличаются от базовых типов данных только физическим местоположением их определения. В этом случае определение обычно находится очень близко к определению свойства, использующего их.
Комбинаторы значений компонентов
Скобки
Скобки заключают несколько сущностей, комбинаторов и множителей, затем преобразуют их в один компонент. Они используются для группировки компонентов, чтобы обойти правила приоритета.
bold [ thin && <length> ]
Этот пример соответствует следующим значениям:
bold thin 2vhbold 0 thinbold thin 3.5em
Но не:
-
thin bold 3em, так какboldсопоставлен с компонентом, определённым в скобках, он должен стоять перед ним.
Соседство
Расположение нескольких ключевых слов, литералов или типов данных рядом друг с другом, разделённых одним или несколькими пробелами, называется соседством. Все сопоставленные компоненты обязательны и должны появиться в точном порядке.
bold <length>, thin
Этот пример соответствует следующим значениям:
bold 1em, thinbold 0, thinbold 2.5cm, thinbold 3vh, thin
Но не:
-
thin 1em, bold, так как сущности должны быть в выраженном порядке -
bold 1em thin, так как сущности обязательны; запятая, литерал, должна быть присутствовать -
bold 0.5ms, thin, так как значенияmsне являются<length>
Двойной амперсанд
Разделение двух или более компонентов двойным амперсандом, &&, означает, что все эти сущности обязательны, но могут появиться в любом порядке.
bold && <length>
Этот пример соответствует следующим значениям:
bold 1embold 02.5cm bold3vh bold
Но не:
-
bold, так как оба компонента должны появиться в значении. -
bold 1em bold, так как оба компонента должны появиться только один раз.
Примечание: Соседство имеет приоритет над двойным амперсандом, что означает, что bold thin && <length> эквивалентно [ bold thin ] && <length>. Оно описывает bold thin <length> или <length> bold thin но не bold <length> thin.
Двойная черта
Разделение двух или более компонентов двойной чертой, ||, означает, что все сущности являются необязательными: должно быть присутствовать хотя бы одно, и они могут появиться в любом порядке. Обычно это используется для определения различных значений сокращённого свойства.
<'border-width'> || <'border-style'> || <'border-color'>
Этот пример соответствует следующим значениям:
1em solid blueblue 1emsolid 1px yellow
Но не:
-
blue yellow, так как компонент должен появиться не более одного раза. -
bold, так как это не ключевое слово, разрешенное как значение любой из сущностей.
Примечание: Двойной амперсанд имеет приоритет над двойной чертой, что означает, что bold || thin && <length> эквивалентно bold || [ thin && <length> ]. Оно описывает bold, thin <length>, bold thin <length>, или thin <length> bold но не <length> bold thin, так как жирный шрифт, если не опущен, должен быть размещен перед или после всего компонента thin && <length>.
Одинарная черта
Разделение двух или более сущностей одной чертой, |, означает, что все сущности являются исключительными вариантами: должен быть присутствовать ровно один из этих вариантов. Обычно это используется для разделения списка возможных ключевых слов.
<percentage> | <length> | left | center | right | top | bottom
Этот пример соответствует следующим значениям:
3%03.5emleftcenterrighttopbottom
Но не:
-
center 3%, так как только один из компонентов должен быть присутствовать. -
3em 4.5em, так как компонент должен быть присутствовать не более одного раза.
Примечание: Двойная черта имеет приоритет над одинарной чертой, что означает, что bold | thin || <length> эквивалентно bold | [ thin || <length> ]. Оно описывает bold, thin, <length>, <length> thin, или thin <length> но не bold <length> так как только одна сущность с каждой стороны комбинатора | может быть присутствовать.
Множители значений компонентов
Множитель — это знак, который указывает, сколько раз предыдущая сущность может повторяться. Без множителя сущность должна появиться ровно один раз.
Множители не могут быть добавлены и имеют приоритет над всеми комбинаторами.
Звездочка (*)
Множитель звездочка указывает, что сущность может появиться ноль, один или несколько раз.
bold smaller*
Этот пример соответствует следующим значениям:
boldbold smallerbold smaller smaller-
bold smaller smaller smaller, и так далее.
Но не:
-
smaller, так какboldсопоставлена, и она должна появиться перед любым ключевым словомsmaller.
Плюс (+)
Множитель плюс указывает, что сущность может появиться один или несколько раз.
bold smaller+
Этот пример соответствует следующим значениям:
bold smallerbold smaller smaller-
bold smaller smaller smaller, и так далее.
Но не:
-
bold, так какsmallerдолжна появиться по крайней мере один раз. -
smaller, так какboldсопоставлена и должна появиться перед любым ключевым словомsmaller.
Вопросительный знак (?)
Множитель вопросительный знак указывает, что сущность является необязательной и должна появиться ноль или один раз.
bold smaller?
Этот пример соответствует следующим значениям:
boldbold smaller
Но не:
-
bold smaller smaller, так какsmallerдолжна появиться не более одного раза. -
smaller, так какboldсопоставлена и должна появиться перед любым ключевым словомsmaller.
Фигурные скобки ({ })
Множитель фигурных скобок, заключающий в себе два целых числа, разделенных запятой, A и B, указывает, что сущность должна появляться как минимум A раз и как максимум B раз.
bold smaller{1,3}
Этот пример соответствует следующим значениям:
bold smallerbold smaller smallerbold smaller smaller smaller
Но не соответствует:
-
bold, так какsmallerдолжно появляться как минимум один раз. -
bold smaller smaller smaller smaller, так какsmallerдолжно появляться не более трех раз. -
smaller, так какboldрасположено рядом и должно появиться перед любым ключевым словомsmaller
Знак решетки (#)
Множитель знака решетки указывает, что сущность может повторяться один или более раз (например, множитель плюс), но каждое вхождение отделяется запятой (',').
bold smaller#
Этот пример соответствует следующим значениям:
bold smallerbold smaller, smaller-
bold smaller, smaller, smaller, и так далее.
Но не соответствует:
-
bold, так какsmallerдолжно появляться как минимум один раз. -
bold smaller smaller smaller, так как разные вхожденияsmallerдолжны быть разделены запятыми. -
smaller, так какboldрасположено рядом и должно появиться перед любым ключевым словомsmaller.
Знак решетки может быть необязательно последован фигурными скобками, чтобы указать, сколько раз повторяется сущность.
bold smaller#{1,3}
Этот пример соответствует следующим значениям:
bold smallerbold smaller, smallerbold smaller, smaller, smaller
Но не соответствует:
-
bold smaller, smaller, smaller, smaller, так какsmallerдолжно появляться не более трех раз.
bold smaller#{2}
Этот пример соответствует следующему значению:
bold smaller, smaller
Но не соответствует:
-
bold smaller, так какsmallerдолжно появляться ровно два раза.
Восклицательный знак (!)
Множитель восклицательного знака после группы указывает, что группа обязательна и должна генерировать как минимум одно значение; даже если грамматика элементов внутри группы иначе позволяет опустить все содержимое, хотя бы одно компонентное значение не должно быть опущено.
[ bold? smaller? ]!
Этот пример соответствует следующим значениям:
boldsmallerbold smaller
Но не соответствует:
- ни
boldниsmaller, так как одно из них должно появиться. -
smaller bold, так какboldрасположено рядом и должно появиться перед ключевым словомsmaller. -
bold smaller bold, так какboldиsmallerмогут появиться только один раз.
Обозначение диапазона в квадратных скобках ([min,max])
Некоторые типы могут принимать числовые значения в определённом диапазоне. Например, свойство column-count может принимать целое число от положительной единицы до бесконечности включительно. Соответствующий синтаксис выглядит так:
<integer [1,∞]>
Любое значение вне этого указанного диапазона делает всё объявление недействительным, поэтому браузер его проигнорирует.
Обозначение диапазона в квадратных скобках [min, max] указывает на включительный диапазон между min и max значениями. Это обозначение используется в числовых типах обозначений и может включать единицы, например <angle [0,180deg]>. Положительная и отрицательная бесконечность (-∞ и ∞) не должны иметь указанных единиц. Типы, заданные в единицах, могут иметь нулевые значения с или без единиц, например <time [0s,10s]> или <time [0,10s]>.
Вот ещё несколько примеров:
-
<integer [-∞,∞]>: Любое целое число от отрицательной бесконечности до положительной бесконечности. -
<integer [0,∞]>: Любое целое число от 0 до положительной бесконечности включительно является допустимым. Отрицательные целые числа недопустимы. -
<time [0s,10s]>или<time [0,10s]>: Любая длительность от 0 до 10 секунд является допустимой. -
<integer [-∞,-1]> | <integer [1,∞]>: Любое целое число, кроме нуля, является допустимым.
Резюме
| Знак | Название | Описание | Пример |
|---|---|---|---|
| Комбинаторы | |||
| Последовательность | Компоненты обязательны и должны появляться в этом порядке | solid <length> | |
&& | Двойной амперсанд | Компоненты обязательны, но могут появляться в любом порядке | <length> && <string> |
|| | Двойная черта | Должно быть присутствовать хотя бы один из компонентов, и они могут появляться в любом порядке. | <'border-image-outset'> || <'border-image-slice'> |
| | Одинарная черта | Должен присутствовать ровно один из компонентов | smaller | small | normal | big | bigger |
[ ] | Скобки | Группировать компоненты, чтобы обойти правила приоритета | bold [ thin && <length> ] |
| Множители | |||
| Без множителя | Ровно 1 раз | solid | |
* | Звездочка | 0 или более раз | bold smaller* |
+ | Плюс | 1 или более раз | bold smaller+ |
? | Вопросительный знак | 0 или 1 раз (т.е. необязательно) | bold smaller? |
{min,max} | Фигурные скобки | Как минимум min раз, как максимум max раз | bold smaller{1,3} |
# | Знак решетки | 1 или более раз, каждое вхождение разделено запятой (,) | bold smaller# |
! | Восклицательный знак | Группа должна генерировать как минимум 1 значение | [ bold? smaller? ]! |
| Диапазоны | |||
[min,max] | Числовой диапазон в квадратных скобках | Определяет числовой диапазон | <integer [0,∞]> |
Спецификации
| Спецификация |
|---|
| Модуль CSS Values and Units Level 4 # value-defs |
См. также
- Основные понятия CSS:
© 2005–2024 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/CSS/Value_definition_syntax