Сделал небольшой обзор различных CSS селекторов. Думаю профи читать не стоит, а вот для новичков узнать про селекторы атрибутов будет полезно. Пример оригинального и достаточно полезного их использования я приводил в недавней статье «CSS для диагностики».
| Тип селектора | Образец | Описание |
|---|---|---|
| Универсальный селектор | * |
Применяется ко всем элементам |
| Селектор типа | Е |
Применяется к элементу Е |
| Селектор класса | .info |
Применяется к любому элементу, который имеет атрибут class со значением info |
Id селектор |
#footer |
Применяется к любому элементу, который имеет атрибут id со значением footer |
| Вложенный селектор | E F |
Применяется к любому элементу F, который является потомком по отношению к E |
| Дочерний селектор | E > F |
Применяется к любому элементу F, который является дочерним по отношению к E |
| Смежный селектор | E + F |
Применяется к любому элементу F, который является смежным по отношению к E (имеют одного родителя) |
| Селектор атрибута | E[атрибут] |
Применяется к любому элементу E, который имеет атрибут, не зависимо от значения |
| Селектор атрибута | E[атрибут="значение"] |
Применяется к любому элементу E, который имеет атрибут с заданным значением |
| Селектор атрибута | E[атрибут~="значение"] |
Применяется в случае если значением атрибута элемента E является список «слов», разделенных пробелами, одно из которых в точности равно заданному. Если используется данный селектор, то слова, указанные в значении, не должны содержать пробелов (так как они уже используются для разделения слов) |
| Селектор атрибута | E[атрибут|="значение"] |
Применяется в случае если значением атрибута элемента E является список разделенных дефисом «слов», начинающийся с заданного слова |
Псевдо-класс :first-child |
E:first-child |
Применяется к элементу E, когда он является первым дочерним элементом своего родителя |
| Псевдо-класс ссылки | E:linkE:visited |
Применяется к еще не посещенным ссылкам (:link) и уже посещенным (:visited) |
| Динамические псевдо-классы | E:activeE:hoverE:focus |
Применяется к E в зависимости от действий пользователя |
Псевдо-класс :language |
E:lang(c) |
Применяется к элементу E который соответствует языку (c) |
Псевдо-класс :first-line |
E:first-line |
Применяется к содержимому первой строки элемента E |
Псевдо-класс :first-letter |
E:first-letter |
Применяется к первой букве содержимого элемента E |
Псевдо-классы :before и :after |
E:beforeE:after |
Используются для вставки генерируемого контента перед и после содержимого |
Здесь я обнаружил еще несколько селекторов атрибутов, которых нет в официальном источнике.
| Тип селектора | Образец | Описание |
|---|---|---|
| Селектор атрибута | E[атрибут^="значение"] |
Применяется в случае если значение атрибута элемента E начинается с заданного слова |
| Селектор атрибута | E[атрибут$="значение"] |
Применяется в случае если значение атрибута элемента E заканчивается заданным словом |
| Селектор атрибута | E[атрибут*="значение"] |
Применяется в случае если заранее не возможно определить в каком месте значения атрибута находится заданное слово |
Примеры использования:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> <html> <head> <style type="text/css"> a[href^="http://"] { color: red } </style> </head> <body> <p><a href="link1.html">Обычная ссылка</a> | <a href="http://www.prodigy.ru" target="_blank">Ссылка на сайт Prodigy</a></p> </body> </html>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> <html> <head> <style type="text/css"> a[href$=".ru"] { /* Если ссылка заканчивается на .ru */ color: red } a[href$=".com"] { /* Если ссылка заканчивается на .com */ color: green } </style> </head> <body> <p><a href="http://www.microsoft.com">Microsoft.Com</a> | <a href="http://www.yandex.ru">Yandex.Ru</a></p> </body> </html>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> <html> <head> <style type="text/css"> [href*="mysite"] { background: yellow } </style> </head> <body> <p><a href="http://www.mysite.ru/html/">Моя страница</a> | <a href="http://stepbystep.htmlbook.ru">Шаг за шагом</a> | <a href="http://web-graphics.ru">Графика для Веб</a></p> </body> </html>
Дочерние, смежные и селекторы атрибутов поддерживаются браузером Internet Explorer начиная с версии 7.0, но для корректной работы необходимо добавить правильный !DOCTYPE.
Таблица совместимости браузеров с CSS-селекторами, псевдо-элементами и псевдо-классами.




Объясните, чем реально отличается дочерний селектор, от вложеного селектора?
Дочерний селектор применяется к элементу который является прямым потомком своего родителя, а вложенный применяется к элементу независимо от уровня вложенности. Например em по отношению к div в первом случае
и во второмЯсно, спасибо. На сколько я знаю очень многие селекторы не работают в IE6. Хотелось бы дополнить табличку таким ньюансом.
Я думаю, что этот факт известен всем. IE6 как гвоздь в….
Ну ничего, через год ослик сдохнет и мы все вздохнем спокойно.
А блок с восклицательным знаком не бросается в глаза?
Тут всё гораздо нагляднее:
http://xhtml.ru/2007/01/20/css-selectors/
Я уже оставил эту ссылку в конце поста. Согласен что нагляднее, вот если бы еще и описания самих селекторов были.
Можно было еще подсветить примеры использования.
Интересно! Спасибо =)
вот тут еще можно посмотреть таблицу, какие селекторы и в каких браузерах на данный момент поддерживаются, а какие пока еще нет http://neoprizma.net/2009/10/15/css-selectors/
Селекторы – очень классная штука. Если бы их полноценно поддерживали все популярные ныне браузеры, верстать было бы значительно проще и приятнее.
«Здесь я обнаружил еще несколько селекторов атрибутов, которых нет в официальном источнике.»
Потому что это CSS3. Может поправить? А то создается впечатление «недокументированной возможности».
Дочерние, смежные и селекторы атрибутов поддерживаются браузером Internet Explorer начиная с версии 7.0, но для корректной работы необходимо добавить правильный !DOCTYPE.
Какой именно !DOCTYPE нужно написать, что бы ишак нормально воспринимал селекторы атрибутов?