HTML 5, CSS 3 и Web 2.0. Разработка современных Web-сайтов
Шрифт:
Мы рассмотрели пять разновидностей стилей CSS. Четыре из них — стилевые классы, стили переопределения тега, именованные и комбинированные стили — могут присутствовать только в таблицах стилей. Это мы уже знаем.
Таблицы стилей, в зависимости от места их хранения, разделяются на два вида.
Внешние таблицы стилей хранятся отдельно от Web-страниц, в файлах с расширением css. Они содержат CSS-код определений стилей.
Листинг 7.4 иллюстрирует пример внешней таблицы стилей.
Листинг 7.4
redtext { color: #FF0000 }
#bigtext { font-size: large } EM { color: #00FF00; font-weight: bold } P EM { color: #0000FF }
Как
Если внешняя таблица стилей хранится отдельно от Web-страницы, значит, нужно как-то привязать ее к Web-странице. Для этого предназначен одинарный метатег <LINK>, который помещается в секцию заголовка соответствующей Web-страницы. (О метатегах и секциях Web-страниц говорилось в главе 1.) Вот формат его написания:
<LINK REL="stylesheet" href="#"text_emphasis">интернет-адрес файла таблицы стилей>" TYPE="text/css">
Интернет-адрес файла таблицы стилей записывают в качестве значения атрибута HREF этого тега.
Остальные атрибуты тега <LINK> для нас несущественны. Атрибут REL указывает, чем является файл, на который ссылается тег <LINK>, для текущей Web-страницы; его значение "stylesheet" говорит, что этот файл — внешняя таблица стилей. А атрибут TYPE указывает тип MIME файла, на который ссылается данный тег; внешняя таблица стилей имеет тип MIME text/css.
Листинг 7.5
<HEAD>
.
<LINK REL="stylesheet" href="#" TYPE="text/css">
.
</HEAD>
В примере из листинга 7.5 мы привязали внешнюю таблицу стилей, хранящуюся в файле main.css, к текущей Web-странице.
Преимущество внешних таблиц стилей в том, что их можно привязать сразу к нескольким Web-страницам. Недостаток всего один, да и тот несущественный, — внешняя таблица стилей хранится в отдельном файле, так что есть вероятность его "потерять".
Внутренняя таблица стилей (листинг 7.6) записывается прямо в HTML-код Web- страницы. Ее заключают в парный тег <STYLE> и помещают в секцию заголовка. В остальном она не отличается от ее внешней "коллеги".
Листинг 7.6
<HEAD>
.
<STYLE>
redtext { color: #FF0000 }
#bigtext { font-size: large }
EM { color: #00FF00; font-weight: bold }
P EM { color: #0000FF }
</STYLE>
.
</HEAD>
Преимущество внутренней таблицы стилей в том, что она является неотъемлемой частью Web-страницы и, стало быть, никогда не "потеряется". Недостатков два. Во-первых, стили, определенные во внутренней таблице стилей, применяются только к той Web-странице, в которой эта таблица стилей находится. Во-вторых, внутренняя таблица стилей не соответствует концепции Web 2.0,
требующей отделять содержимое Web-страницы от ее представления.В одной и той же Web-странице могут присутствовать сразу несколько таблиц стилей: несколько внешних и внутренняя (листинг 7.7).
Листинг 7.7
<HEAD>
.
<LINK REL="stylesheet" href="#" TYPE="text/css">
<LINK REL="stylesheet" href="#" TYPE="text/css">
.
<STYLE>
.
</STYLE>
.
</HEAD>
В таком случае действие всех этих таблиц стилей складывается. А по каким правилам — мы сейчас выясним.
Правила каскадности и приоритет стилей
Как мы уже выяснили, на один и тот же элемент Web-страницы могут действовать сразу несколько стилей. Это могут быть стили разных видов (стиль переопределения тега, стилевой класс, комбинированный стиль, встроенный стиль) или определенные в разных таблицах стилей (внешних и внутренней). Такое встречается сплошь и рядом, особенно на Web-страницах со сложным оформлением.
Но как Web-обозреватель определяет, какой именно стиль применить к тому или иному элементу Web-страницы? Мы уже знаем, что в таких случаях действие стилей как бы складывается. Но по каким правилам?
Предположим, что мы создали внешнюю таблицу стилей (листинг 7.8).
Листинг 7.8
redtext { color: #FF0000 }
#bigtext { font-size: large }
EM { color: #00FF00; font-weight: bold }
После этого мы изготовили Web-страницу, содержащую внутреннюю таблицу стилей (листинг 7.9).
Листинг 7.9
<STYLE>
redtext { color: #0000FF } EM { font-size: smaller }
</STYLE>
А в самой Web-странице написали вот такой фрагмент HTML-кода:
<P CLASS="redtext">Это красный текст.
<P ID="bigtext" STYLE="color: #FFFF00">Это большой текст.
<EM>Это курсив.</EM>
Хорошо видно, что на элементы этой Web-страницы действуют сразу по нескольку стилей. Так, во второй строке кода к тегу привязаны и именованный стиль bigtext, и встроенный стиль. Но этого мало — и внешняя, и внутренняя таблицы стилей содержат определение двух одинаковых стилей — стилевого класса redtext и стиля переопределения тега <EM>!
Так что же мы получим в результате?
Рассмотрим сначала последнюю строку приведенного HTML-кода с тегом <EM>. Сначала Web-обозреватель загрузит, обработает и сохранит в памяти внешнюю таблицу стилей. Затем он обработает внутреннюю таблицу стилей и добавит все содержащиеся в ней определения стилей к уже хранящимся во внешней таблице стилей. Это значит, что стили переопределения тега <EM>, заданные в разных таблицах стилей, будут сложены, и результирующий стиль, написанный на языке CSS, станет таким: