Забытые CSS селекторы
Перевод статьи: Forgotten CSS selectors
Каждый, кто использовал CSS хоть какое-то время, вероятно, были разочарованы отсутствием поддержки селекторов CSS 2.1 в Internet Explorer 6. Есть немало случаев, когда такой селектор позволяет нам добраться до необходимых элементов во всех нормальных браузерах, но чтобы это работало в IE 6, приходится добавлять класс или атрибут идентификатора в код HTML.
Тем временем, рыночная доля IE 6 теперь, наконец-то, на уровне, где мы, как разработчики можем сказать, что если сайт «поддерживает» IE 6, не означает «Looking Pixel Perfect». К счастью, все больше и больше клиентов это также понимают. IE 7 существует уже более трех лет, да и 9-й уже не за горами, поэтому я думаю, пришло время возродить эти CSS селекторы, которые мы никогда не использовали, только потому, что IE 6, не понимает их.
Здесь приводится краткое описание некоторых из наиболее полезных «забытых» CSS 2.1 селекторов.
Селектор потомков
Указывает на непосредственных потомков состоит из двух или более селекторов разделенных знаком «больше» – «>»
Следующее правило правило будет применено для всех элементов strong, которые являются непосредственными потомками элемента p:
p > strong {color:#a00;}
Cелектор соседей одного уровня
Такой селектор состоит из двух простых селекторов, разделенных знаком плюс – »+» и указывает на элемент являющийся соседом первого селектора.
Следующее правило выбирает элементы p, которым непосредственно предшествует элемент ul :
ul + p {color:#a00;}
Селектор атрибутов
Как видно из названия, позволяет выбрать элементы основываясь на наличии или значении их атрибутов. Всего есть четыре способа их применения, но я считаю, два из них более полезны, чем другие:
[att]
Позволяет выбрать элементы, у которых есть атрибут att, не зависимо не его значения. Следующее правило применяются ко всем элементам, которые имеют атрибут title:
a[title] {color:#a00;}
[att=val]
Элементы, значение атрибута att со значением именно val. Следующий пример, селектор для всех элементов input, которые имеют атрибут type со значением «text»:
input[type=text] {color:#a00;}
:first-child
Псевдо-класс :first-child соответствует элементу, который является первым дочерним элементом другого элемента. Следующее правило применяется для первого элемента li во всех упорядоченных списках (ol) в документе:
ol li:first-child {color:#a00;}
:hover и :focus
Большинство людей используют динамический псевдо-класс :hover для управления оформлением ссылок, когда над ними находится курсор мыши. Однако его также можно использовать и для каких-либо других элементов, позволяя в некоторых ситуациях подавать полезные визуальные сигналы. Например, изменять цвет фона строки таблицы при на ведении мыши:
tr:hover {background:#eee;}
Необходимо помнить об одной немаловажной вещи, что эти сигналы будут видны только пользователям, которые используют мышь. Поэтому видимо имеет смысл это использовать только для некритичных вещей.
Динамический псевдо-класс :focus применяется для таких элементов, как ссылки и контролы форм, которые могут принимать фокус ввода.
Следующие правило применяются к элементу textarea, который имеет фокус:
textarea:focus {
color:#000;
background:#ffc;
}
Примечание: :focus не работает в IE 7.
Селектор множественных классов
Вы можете присвоить несколько имен классов элементу, и Вы можете написать селекторы для элементов, которые имеют несколько классов. Следующее правило будет соответствовать элементам p, которые имеют в своем списке имен классов как «info», так и «error»:
p.info.error {
color:#900;
font-weight:bold;
}
Помните, что IE6 будет искать только последний класс в селекторе, так что он будет применять это правило для всех элементов p, которые имеют класс "error". Имейте это в виду при использовании селекторов множественных классов.
Чистота разметки c помощью концепции прогрессивного улучшения
С помощью этих селекторов, можно сделать разметку HTML чище, поскольку они позволяют обойтись гораздо меньшим количеством необходимых классов, а в не которых случаях даже отказаться от использования JavaScript, что ранее было необходимо только лишь для достижения визуальной эквивалентности в IE6. Я не говорю, что Вы должны "прекратить поддерживать" IE6, это может касаться только некоторых вещей, чтобы не выглядеть совершенным на уровне веб-браузера, которому скоро будет уже девять лет. Кроме того, разве веб-сайты должны выглядеть одинаково в любом браузере?


