Профессиональный веб-дизайн: Введение в современные веб-технологии "3. Создание внешней таблицы. Теперь создайте таблицу с двумя строками. Во второй строке создайте две ячейки - в первую переместите таблицу цифр, а во вторую - таблицу знаков." Как в ячейку <td> поместить таблицу? Таблица же сама состоит из ячеек. Исходя из задания следует, что <td> может быть родителем для <td>, но это противоречит правилам HTML? |
Механизмы CSS
Специальные правила (at-rules)
Специальные правила дополнительно расширяют возможности CSS. Каждое правило начинается с символа "at" (@) и идентификатора и заканчивается, включительно, точкой с запятой (;) или блоком деклараций ({…}), что раньше.
Импорт (@import)
Правило позволяет импортировать (подключить) таблицу стилей из внешнего файла.
<style type="text/css"> @import "basestyle.css"; p { font-family: Verdana; } </style>
эквивалентно
<link rel="stylesheet" type="text/css" href="basestyle.css"> <style type="text/css"> p { font-family: Verdana; } </style>
Браузер игнорирует @import, если это правило находится внутри блока ({…}) или следует после любого другого правила кроме @import и @charset. Таким образом, следующие записи ошибочны:
<style type="text/css"> h1 { color: red; } @import "mystyle.css"; </style> <style type="text/css"> @import "mystyle.css"; @media print { @import "print-style.css"; Body { background: white; } </style>
Правильными конструкциями будут:
<style type="text/css"> @import "mystyle.css"; h1 { color: red; } </style> <style type="text/css"> @import "mystyle.css"; @import "print-style.css" print; @media print { body { background: white; } </style>
Носитель (@media)
Это правило позволяет задавать набор правил для различных типов носителей в пределах одной таблицы стилей.
<style type="text/css"> @media screen { body { background: blue; color: white; } /* body */} /* @media */ @media print { body { background: transparent; color: black; } /* body */} /* @media */ </style>
Эквивалентная запись выглядит следующим образом:
<style type="text/css" media="screen"> body { background: blue; color: white; } </style> <style type="text/css" media="print"> body { background: transparent; color: black; } </style>
Спецификация CSS 2.1 определяет следующие типы носителей:
- screen – цветной экран монитора
- print – принтер или экран монитора в режиме предварительного просмотра печати
- speech (в спецификации CSS 2 aural) – голосовой синтезатор
- projection – проектор. В отличие от монитора, предполагает постраничное представление
- handheld – небольшие устройства с низким разрешением экрана и ограниченной шириной полосы пропускания, например, сотовые телефоны
- tv – телевизор (низкое разрешение, цвет, ограниченная прокрутка, звук)
- brail – экран для людей с пониженным зрением, работающий по системе Брайля
- embossed – принтер Брайля
- tty – телетайп или устройство с ограниченными возможностями экрана
- all – любое устройство
Типы носителей взаимоисключающи, однако одно и то же устройство может работать в нескольких режимах, например экран монитора в обычном режиме и режиме просмотра печати.
Печатная страница (@page)
Это правило определяет размеры, ориентацию и поля печатной страницы.
@page {margin: 3cm;} задает поля шириной 3 см.
Псевдо-классы :left, :right и :first позволяют задать специальные правила для левой, правой (при двухсторонней печати) и первой страницы.
@page :left { margin-left: 4cm; margin-right: 3cm; } @page :right { margin-left: 3cm; margin-right: 4cm; } @page :first { margin-top: 10cm /* Верхнее поле для первой страницы 10 см */; }
Кодировка (@charset)
Это правило задает кодировку внешней таблицы стилей, должно присутствовать не более одного раза и располагаться в самом начале файла. @charset "Windows-1251"; /* Кириллица Windows */
Внедренный шрифт (@font-face)
Это правило позволяет разработчику загрузить специфический шрифт, отсутствующий на клиентской машине.
@font-face { font-family: "MyFont"; src: url(FontSourceFile.eot); } h1 { font-family: "Verdana" , "MyFont"; }
Специфичность и порядок применения правил
Конфликт правил неотделим от каскадных таблиц стилей. Когда два или более объявления подходят к одному элементу, браузер должен решить, какое именно применить. Internet Explorer применяет следующий алгоритм:
- Отбираются все подходящие объявления, включая наследованные, которые подходят к данному типу носителя ( @media )
- Объявления отсортировываются по весу и происхождению. Стили разработчика перевешивают стили пользователя (которые перевешивают встроенные стили браузера), если только пользовательское объявление не содержит пометки !important (важно), которая увеличивает вес объявления.
- Селекторы правил отсортировываются по специфичности, рассчитываемой как число, полученное строковым слиянием (a) наличия атрибута style у элемента, (b) числа атрибутов id, (c) числа атрибутов class и псевдо-классов и (d) числа типов элементов и псевдо-элементов в селекторе. Если элемент содержит атрибуты, влияющие на представление (например, атрибут width элемента table ) то эти атрибуты преобразуются в соответствующие CSS атрибуты с нулевой специфичностью.
Например, любой из перечисленных селекторов может применяться к элементу li, но лишь правило с наибольшей специфичностью будет применено.
Селектор Атрибут style (a) Число атрибутов id (b) Число классов (c) Число типов (d) Специфичность * 0 0 0 0 0 li 0 0 0 1 1 ul li 0 0 0 2 2 li:first-line 0 0 0 2 2 ul ol+li 0 0 0 3 3 .class1 0 0 1 0 10 li.class2 0 0 1 1 11 li[class="class1"] 0 0 1 1 11 li[id="myId"] 0 0 1 1 11 .class1.class2 0 0 2 0 20 li.class1.class2 0 0 2 1 21 li#myId 0 1 0 1 101 style="" 1 0 0 0 1000 - Если два правила имеют равный вес и специфичность, применяется прочитанное последним. (Импортированные при помощи @import таблицы стилей всегда проигрывают записанным позже.)
Вопросы
- Какими способами можно связать HTML-документ с таблицей стилей?
- Из чего состоит правило CSS?
- Что такое простой селектор?
- Что выбирает селектор типа?
- Что выбирает селектор класса?
- Что выбирает селектор ID?
- Какой смысл придают правилу CSS комбинаторы потомков и соседей?
- Перечислите и охарактеризуйте определяемые CSS псевдоклассы и псевдоэлементы.
- Какие типы носителей определяет спецификация CSS? Как связать таблицу стилей с носителем?
- Как разрешаются конфликты определения стилей?