![]() |
||
|
aranea.ru || Спецификация CSS2 | 6.4. Каскадирование
6.4. Каскадирование6.4.1. Порядок каскадирования.6.4.2. Правила !important. 6.4.3. Расчет специфичности селектора. 6.4.4. Предшествование нестилистических рекомендаций по презентации. Стилевые таблицы могут иметь три различных происхождения: авторское, пользовательское и устройства вывода.
Обратите внимание на то, что стилевая таблица по умолчанию может изменяться, если установки системы модифицируются пользователем (например, системные цвета). Однако, из-за ограничений для внутреннего выполнения устройства вывода, не возможно изменить значения в стилевой таблице по умолчанию. Стилевые таблицы этих трех происхождений совмещаются в области действия, они взаимодействуют в соответствии с каскадированием. Каскадирование CSS присваивает вес для каждого стилевого правила. Когда применяется несколько правил, то правило с наибольшим весом имеет преимущество над другими. По умолчанию правила в авторских стилевых таблицах имеют больший приоритет, чем правила в пользовательской стилевой таблице. Приоритет меняется для правил "!important". Все правила, авторские и пользовательские, имеют больший приоритет, чем стилевая таблица устройства вывода по умолчанию. Импортированная стилевая таблица тоже каскадируется и ее приоритет зависит от порядка импортирования. Правила, определенные в данной стилевой таблице, подменяют правила, импортированные из других стилевых таблиц. Импортированные стилевые таблицы могут сами импортировать или подменять другие стилевые таблицы рекурсивно, где применяется те же приоритетные правила. 6.4.1. Порядок каскадирования.Для нахождения значения в комбинации элемент/свойство, устройства вывода могут применять следующий порядок сортировки:
За исключением установок "!important" в индивидуальных объявлениях, эта стратегия предоставляет авторским стилевым таблицам наивысший приоритет, чем таблицы читателя. Поэтому, важно, чтобы устройство вывода давало пользователю возможность отключить влияние определенной стилевой таблицы, например, через разворачиваемое меню. 6.4.2. Правила !important.CSS пытаются создать баланс значений между авторскими и пользовательскими стилевыми таблицами. По умолчанию, правила в авторской стилевой таблице имеют приоритет над пользовательской (смотрите правило каскадирования 3). Однако, для баланса объявление "!important" (ключевое слово "!" и "important" с последующим объявлением) имеет приоритет над нормальной декларацией. И авторская, и пользовательская стилевые таблицы могут содержать объявления "!important", и тогда пользовательские правила "!important" подменяют авторские правила "!important". Эта особенность CSS улучшает доступность документов и контроль над их презентацией для пользователей со специальными требованиями (большой шрифт, цветовые комбинации и т.д.). Обратите внимание. Это – семантическое изменение после CSS1. В CSS1 авторские правила "!important" имели преимущество над пользовательскими правилами "!important". Декларация сокращенного свойства (например, 'background'), как "!important", является эквивалентной объявлению всех соответствующих подсвойств, как "!important". Первое правило в пользовательской стилевой таблице в следующем примере содержит объявление "!important", которое подменяет соответствующую декларацию в авторской стилевой таблице. Второе объявление будет тоже побеждать из-за маркировки "!important". Однако, третье правило в пользовательской стилевой таблице не является "!important", и поэтому будет подчиняться второму правилу авторской стилевой таблицы (которая применена для установки стиля сокращенного свойства). Кроме этого, третье авторское правило будет уступать второму авторскому правилу, поскольку второе правило - "!important". Видно, что объявления "!important" тоже имеют значение внутри авторских стилевых таблиц.
/* From the user's style sheet */
P { text-indent: 1em ! important }
P { font-style: italic ! important }
P { font-size: 18pt }
/* From the author's style sheet */
P { text-indent: 1.5em !important }
P { font: 12pt sans-serif !important }
P { font-size: 24pt }
6.4.3. Расчет специфичности селектора.Специфичность селектора рассчитывается следующим образом:
Конкатенация трех чисел а-b-c (в системе счисления с большим основанием) предоставляют специфичность. Некоторые примеры:
* {} /* a=0 b=0 c=0 -> specificity = 0 */
LI {} /* a=0 b=0 c=1 -> specificity = 1 */
UL LI {} /* a=0 b=0 c=2 -> specificity = 2 */
UL OL+LI {} /* a=0 b=0 c=3 -> specificity = 3 */
H1 + *[REL=up]{} /* a=0 b=1 c=1 -> specificity = 11 */
UL OL LI.red {} /* a=0 b=1 c=3 -> specificity = 13 */
LI.red.level {} /* a=0 b=2 c=1 -> specificity = 21 */
#x34y {} /* a=1 b=0 c=0 -> specificity = 100 */
В HTML значения атрибута "style" элемента являются правилами стилевой таблицы. Эти правила не имеют селекторов, но исходя из шага 3 каскадного алгоритма, они, рассматриваются, как имеющие селектор ID (специфичность: a=1, b=0, c=0). На основании шага 4, они, рассматриваются, как идущие после всех других правил.
<HEAD>
<STYLE type="text/css">
#x97z { color: blue }
</STYLE>
</HEAD>
<BODY>
<P ID=x97z style="color: red">
</BODY>
В приведенном выше примере цвет элемента Р будет красным. Хотя специфичность является одинаковой для обоих объявлений, декларация в атрибуте "style" будет подменять декларацию в элементе STYLE из-за каскадного правила 4. 6.4.4. Предшествование нестилистических рекомендаций по презентации.Устройство вывода может выбрать указание на приоритет для презентации из других источников, не являющихся стилевыми таблицами, например, элемент FONT или атрибут "align" в HTML. Если это так, то рекомендации по презентации (не CSS) должны транслироваться для соответствующих правил CSS со специфичностью равной нулю. Правила, как допускается, появляются в начале авторской стилевой таблицы и могут преодолевать последующие правила стилевой таблицы. Обратите внимание. На переходном этапе эта политика облегчает действие стилистических атрибутов при совместном существовании со стилевыми таблицами. Обратите внимание. В CSS1, рекомендации для презентации (не CSS) даются со специфичностью равной 1, а не 0. Это изменение появляется из-за введения универсального селектора, который имеет специфичность 0. |