7. Совместимость с CSS1. Спецификация CSS1
UA, поддерживающий СSS, обрабатывает документы в соответствии со стандартом CSS1 в следующей последовательности:
- делается попытка выбрать все, что указано в таблице стилей и разобрать в соответствии со спецификацией;
- рассортировать определения в соответствии с каскадированием установок;
- реализовать функции CSS1 в пределах ограничений, накладываемых устройствами вывода (см. пояснение ниже). UA, производит вывод таблицы стилей CSS, если она соответствует стандарту CSS;
- выводится соответствующая CSS таблица стилей.
UA, использующий CSS1 для показа и вывода документов, отрабатывает таблицу стилей CSS1 в соответствии со спецификацией, если в наличии имеются обе установки согласования.
UA не отрабатывает все функции CSS1: он может лишь согласовать результаты отработки с CSS1, реализуя функциональное ядро (сore functionality) последнего. В функциональное ядро входит вся спецификация CSS за исключением частей, изъятых явным образом. В тексте, помеченном как "ядро CSS1" следует разъяснение функций, находящихся за пределами ядра. Установки свойств, исключенные из функционального ядра, называются "расширенные свойства CSS1".
Данный раздел определяет только согласование CSS1. В будущем появятся другие уровни CSS, которые могут потребовать UA для реализации различных установок свойств в порядке согласования.
Примеры ограничений, накладываемых средством вывода, следующие: ограничение ресурсов (шрифты, цвет) и ограничение разрешения (вследствие чего границы могут быть неточными). В этих случаях UA должен аппроксимировать значения таблицы стилей. Кроме того, различные особенности пользовательских интерфейсов могут накладывать свои ограничения: например, браузер VR может масштабировать документ , основываясь на текущем "расстоянии" от пользователя.
UA может предусматривать дополнительные пользовательские установки для отображения информации. Например, UA может обеспечивать дополнительные настройки для пользователя с ухудшенным зрением или давать возможность отключать мерцающий текст.
Обратите внимание, что CSS1 не определяет всех аспектов форматирования. Например, UA вправе произвольно выбирать алгоритм определения межсимвольного расстояния.
Данная спецификация рекомендует (но не предписывает), чтобы UA:
- допускал определение пользовательской таблицы стилей читателем;
- допускал возможность включения и выключения индивидуальной таблицы стилей.
Оба правила согласования описывают лишь функциональный, но не пользовательский интерфейс.
7.1 Последовательно-совместимый синтаксический анализ
Данная спецификация определяет 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.
Назад |
Содержание |
Вперед