• Авторизация


Определяем элементы - CSS Cascading Style Sheets / Каскадные стили 27-08-2010 20:28 к комментариям - к полной версии - понравилось!


В прошлой статье про каскадные
таблицы стилей мы определились с тем, как их можно подключить к документу.
Сегодняшний же рассказ будет о том, как определить те элементы, чей внешний вид
мы хотим настроить с помощью CSS. Если вы пожали плечами и проговорили про себя,
мол, неужто они думают, что я про классы никогда не слышал?, то попробуйте
ответить на вопрос: почему CSS называют не какими-то, а именно каскадными
таблицами стилей?...

Для того, чтобы ответить на заданный выше вопрос о каскадировании, сначала
надо определиться с тем, как те или иные стили настраиваются для применения к
тем или иным элементам.

Стили описываются следующим образом:

элемент {параметр: значение;}

Пар
параметр-значение может быть несколько, тогда все они будут относиться к
соответствующему элементу. Каждая пара заканчивается точкой с запятой, последнюю
точку с запятой можно не ставить. Обратите внимание, что в описании используется
двоеточие, а не знак равенства, как в HTML - это очень типичная ошибка! Вообще,
таблицы стилей надо тщательно проверять на ошибки - если вы опечатаетесь в имени
параметра, то вам не будет выдано никаких предупреждений, просто данный параметр
будет отброшен.

Самый простой способ настроить внешний вид документа - это задать стиль
отображения для требуемых тегов HTML. Например, если мы хотим каждый параграф
вывести зеленым цветом и размером в 12 пикселей, то в описании стилей можно
написать:

P {
color: #00FF00;
font-size: 12px;
}

Способ работает хорошо, но часто возникает необходимость отдельные абзацы
как-то выделить. Для этого можно использовать классы и/или идентификаторы. По
большому счету разница между ними только в том, что идентификатор относится к
какому-то одному элементу (и, кстати, по стандарту все идентификаторы в
документе должны быть уникальными, но на это часто не обращают внимания - все
браузеры успешно работают с неуникальными идентификаторами), а класс может
применяться к группе элементов (в том числе и разнородных).

Например, если в документе требуется абзац выделить красным, то можно в
таблице стилей написать:

P#redelement {
color: #FF0000;
font-size:
12px;
}

а в документе указать: <p ID="redelement">

Если же предполагается, что красных абзацев будет несколько, то правильнее
будет использовать класс (обратите внимание, что идентификатор отделяется
"диезом", а класс - точкой):


P.redelement {color: #FF0000; font-size: 12px; } 


а в документе:
<p class="redelement">


В таблице стилей можно описать и класс, не привязанный к какому-то
элементу:

.redelement {color: #FF0000; font-size: 12px; }

Такой класс
может быть применен не только к параграфу, но и, например, к ячейке таблицы,
тегу FONT или еще чему-то - достаточно в документе указать, например, <FONT
CLASS="redelement">.

Одно и то же описание можно присвоить сразу нескольким элементам - для этого
достаточно перечислить их через запятую в таблице стилей. Например, если вы
хотите, чтобы заголовки любого уровня были одного размера, то в таблице стилей
можно написать:

H1, H2, H3, H4, H5, H6 {font-size: 20px;}

Однако значительно более полезным бывает описание стиля вложенных элементов.
Например, вам может захотеться, чтобы все теги SMALL, которые находятся внутри
абзаца выделялись красным цветом, а те, которые не в абзаце (а, например, в
ячейке таблицы) сохраняли свою естественную окраску. Для этого достаточно
указать требуемые элементы через пробел:

P SMALL {color: #FF0000;}

Такое
объявление будет относиться только к элементам SMALL, расположенным
внутри P. Уровень вложенности может быть любой, но больше трех уровней
применяется редко - слишком запутанной получается картина. Разумеется, такого же
эффекта можно добиться просто создав отдельный класс и описав все вложенные
SMALL с этим классом, но если подобная конструкция повторяется часто, то
использование вложенности более удобно и позволяет сократить размер документа.
Кстати, "вкладывать" можно не только теги HTML, но и классы.

Для удобства пользователей в CSS есть еще несколько встроенных
псевдоэлементов и псевдоклассов. Например, можно указать стиль для
псевдоэлемента first-letter, который изменит вид первой буквы каждого абзаца. А
псевдоклассы очень часто используются для работы со ссылками. Например,
описание:

A:link {text-decoration: none;}
A:visited {text-decoration:
none;}
A:active {text-decoration: none;}
A:hover {text-decoration:
underline; color: #FF0000; }

уберет подчеркивание со ссылок, но когда
пользователь подведет мышку к ссылке, она подчеркнется и покраснеет.

Теперь вернемся к вопросу о каскадировании стилей, заданному в начале статьи.
Предположим, что мы описали стиль параграфа, в котором указали, что цвет текста
должен быть зеленым. Также мы задали стиль тега SMALL, чтобы цвет был синим. А
для тега SMALL "вложенного" в параграф, указали цвет - красный. Теперь, если мы
в документе внутри параграфа часть текста выделим тегом SMALL, то к этому тексту
подойдут два противоречащих друг другу определения: с одной стороны, маленький
текст должен быть синим, но "вложенный" маленький текст должен быть красным...

Вот тут-то и вступает в игру каскадирование. Сначала браузер собирает все
описания стилей встреченного элемента. Если описания стиля нет, то стиль
наследуется от "родительского" элемента (того, в который вложен данный), если же
и там стиль не определен, то используется значение по умолчанию. В простых
случаях на этом этапе все и заканчивается, но часто бывает так, что конфликт
описаний сохраняется. Самым простым примером конфликта может служить повторное
описание того же самого элемента, но с другим стилем. Что же делать несчастному
браузеру?

Обнаружив конфликт описаний браузер отсортирует описания по важности
(важность того или иного стиля можно указать с помощью метки !important после
описания, например:

SMALL {color: #00FF00 !important;}

После этого описания отсортируются по специфичности - чем более конкретно
указано к какому элементу надо применять стиль, тем выше специфичность. Самая
высокая специфичность у идентификатора, ниже - у класса, еще ниже - у элемента.
Именно правило с наивысшей специфичностью и будет применяться. Если же
специфичность одинакова, то будет использоваться последнее из описаний.

Именно таким образом каскадные таблицы стилей, во-первых, "каскадно"
наследуют стили от родителей к потомкам, а во-вторых, разрешают конфликты,
определяя важность противоречащих друг другу описаний...

вверх^ к полной версии понравилось! в evernote


Вы сейчас не можете прокомментировать это сообщение.

Дневник Определяем элементы - CSS Cascading Style Sheets / Каскадные стили | sniper47 - Дневник sniper47 | Лента друзей sniper47 / Полная версия Добавить в друзья Страницы: раньше»