Последовательно-совместимый синтаксический анализ
Данная спецификация определяет CSS первого уровня. В перспективе ожидается появление более высоких уровней CSS с дополнительными свойствами. Чтобы обеспечить совместимость UA, поддерживающих только CSS1, с более поздними версиями языка, в данном разделе описываются процедуры действий UA в случае обнаружения несоответствия требованиям CSS первого уровня.
- установка неизвестного свойства игнорируется. К примеру, таблицу стилей
H1 { color: red; rotation: 70deg }
UA будет обрабатывать, как если бы она имела вид
H1 { color: red; }
IMG { float: left } /* верно для CSS1 */ IMG { float: left top } /* "top" недопустимое значение для 'float' */ IMG { background: "red" } /* в CSS1 ключевые слова не закавычиваются */ IMG { border-width: 3 } /* должна быть указана размерность числа, */ /* выражающего значение длины */
В вышеприведенном примере анализатор CSS1 должен принять к исполнению первую строку и игнорировать последующие, в результате чего таблица стилей примет вид:
IMG { float: left } IMG { } IMG { } IMG { }
UA, совместимый с будущей спецификацией CSS, может отработать какую - либо из остальных строк надлежащим образом.
@three-dee { @background-lighting { azimuth: 30deg; elevation: 190deg; } H1 { color: red } } H1 {color: blue}
где '@three-dee' - недопустимое выражение для CSS1. Следовательно, вся строка с "собачкой" (вплоть до третьих правых фигурных скобок включительно) игнорируется.
UA с поддержкой CSS1 пропускает изъятое выражение, фактически сокращая таблицу стилей до:
H1 {color: blue}
Более подробно:
Таблица стилей CSS, для любой версии CSS, состоит из перечня директив (statements). Есть два вида директив: предустановки и установки. Возле директив допускаются промежутки (пробелы, табуляция, новые строки).
Таблица стилей CSS часто вставляется в документы HTML, и для сокрытия таблицы стилей от более ранних UA, желательно вставлять ее внутри комментариев HTML. Знаки комментариев HTML "" могут быть расположены перед, после и охватывая утверждения. Они могут отделяться интервалами.
Предустановки начинаются с зарезервированных слов с приставкой в виде знака "собачки" '@' (к примеру: @import', '@page') и идентификатора. Идентификатор может состоять из букв, цифр, черточек и спецсимволов (определение ниже).
Предустановка состоит из всего, что находится до следующей точки с запятой (;) включительно. UA для CSS, встречая предустановку, начинающуюся со слова с приставкой, иной чем слово '@import', игнорируют всю предустановку и продолжают отработку после ее окончания. Также игнорируется любая предустановка, начинающаяся с '@import', если она не располагается вверху таблицы стилей, скажем, после какого-либо правила (даже игнорируемого). Рассмотрим пример.
Пусть анализатор CSS1 обрабатывает следующую таблицу стилей:
@import "subs.css"; H1 { color: blue } @import "list.css";
Вторая предустановка '@import' для CSS недопустима. Анализатор CSS1 пропускает всю предустановку, преобразуя таблицу стилей к следующему виду:
@import "subs.css"; H1 {color: blue}
Блок начинается с левых фигурных скобок ({) и кончается правыми (}). Между ними могут быть различные знаки, включая круглые (()), квадратные ([]) и фигурные скобки, которые всегда присутствуют в анализируемых парах и могут быть вложенными. Одинарные кавычки (') и двойные кавычки ("), также присутствующие в анализируемых парах, и знаки между ними воспринимаются как строка (см определение строки в примечании B). Ниже приведен пример блока; обратите внимание, что правая скобка между кавычками не воспринимается как открытие скобки в блоке, и что вторая одинарная кавычка является пропускаемым символом, а не рассматривается как открытие кавычек:
{ causta: "}" + ({7} * '\'') }
Установка состоит из селектора-строки, за которым следует блок - определение. Селектор-строка состоит из всего, что находится вплоть до первой левой фигурной скобки, исключая последнюю. Установка, начинающаяся с некорректной для CSS1, опускается.
К примеру, обработчик CSS1 встречает следующую таблицу стилей:
H1 { color: blue } P[align], UL { color: red; font-size: large } P EM { font-weight: bold }
Вторая строка примера содержит селектор-строку, недопустимую для CSS1. UA для CSS1 должен пропустить эту установку и привести таблицу стилей к следующему виду:
H1 { color: blue } P EM { font-weight: bold }
Блок-определение начинается с левой фигурной скобки ({) и заканчивается обнаруженной правой фигурной скобкой. Между ними располагается перечень из определений (0 или больше), разделенных точками с запятой (;).
Определение состоит из свойства, двоеточия и значения, каждое из которых может отделяться пробелами. Как указывалось ранее, свойство является идентификатором. В значении могут быть использованы разные символы, однако в анализируемых парах должны присутствовать круглые скобки (()), квадратные скобки ([]), фигурные скобки ({}), одинарные кавычки (') и двойные кавычки ("). Круглые, квадратные и фигурные кавычки могут быть вложенными. Внутри кавычек символы воспринимаются как строки.
Чтобы гарантировать возможность в будущем вводить новые свойства и новые значения для существующих свойств, UA должно опускать определение с некорректным названием свойства или некорректным значением свойства. Каждое из свойств CSS1 имеет собственные синтаксические и семантические ограничения значений, которое оно может принимать.
Например, допустим, что обработчик CSS1 встретил следующую таблицу стилей:
H1 { color: red; font-style: 12pt } P { color: blue; font-vendor: any; font-variant: small-caps } EM EM { font-style: normal }
Второе определение в первой линии имеет недопустимое значение '12pt'. Второе определение во второй линии содержит неопределенное свойство 'font-vendor'. Обработчик CSS1 пропустит эти определения, сокращая таблицу стилей до:
H1 { color: red; } P { color: blue; font-variant: small-caps } EM EM { font-style: normal }
Комментарии (см. секцию 1.7) могут быть вставлены везде, где допускается простановка пробелов. CSS1 определяет допустимые места вставки пробелов (напр. внутри значений), и там же могут быть вставлены комментарии.
Всегда соблюдаются следующие правила:
- все таблицы стилей CSS независимы от регистра, исключая части, не находящиеся под контролем CSS. Например, в CSS1 названия семейства шрифта и URL могут зависеть от внешних обстоятельств. Также зависимые от внешних обстоятельств атрибуты для CLASS и ID находятся под контролем HTML [2].
- для CSS1 селекторы (имена, классы и ID элемента) могут включать только символы A-Z, 0-9 и символы Unicode 161-255, плюс черточку (-); они не могут начинаться с черточки или цифры; они могут также включать непечатаемые и символы Unicode в виде цифрового кода (см. ниже).
- обратный слеш, после которого идут не более четырех шестнадцатеричных цифр (0..9A..F), представляет собой символ Unicode с указанным числом.
- любой символ за исключением шестнадцатеричной цифры, может быть пропущен для игнорирования его специального значения, путем установки перед ним обратного слеша. Например: "\"" - строка, состоящая из одной двойной кавычки.
- два предшествующих пункта определяют переходы по обратному слешу. Такие переходы всегда считаются частью идентификатора, за исключением случаев, когда они находятся внутри строки (т.е. "\7B" - это не пунктуация, даже если присутствует "{", а "\32" допускается в начале имени класса, даже если "2" - нет).
Примечание: атрибут HTML CLASS допускает больше символов в названии класса, чем установлено для вышеназванных селекторов. В CSS1 эти символы будут пропущены или транслитерированы в числа Unicode: "B&W?" может быть написано в виде "B\&W\?", или "B\26W\3F", "??????" (Greek: "kouros") может быть написано как "\3BA\3BF\3C5\3C1\3BF\3C2". Ожидается, что в последующих версиях CSS непосредственно можно будет вводить больше символов.
В приложении В дана грамматика CSS1.