Css-селекторы
В CSS есть достаточно способов обратиться к нужным элементам.
В каждой новой спецификацией CSS добавлялось что-то новое, и теперь у нас есть много самых разных селекторов. Кроме того, различие в спецификациях можно использовать, например, чтобы спрятать стили от старых браузеров.
Спецификацию можно найти тут: w3.org/TR/css3-selectors.
Селекторы делятся на несколько видов:
- по типу (
H1,TD,HR...); - универсальный селектор —
*— обозначает элемент любого типа; - селекторы атрибутов (
[data-name],[data-name$="hidden"]); - селекторы по классу (
.main,.header__nav); - селекторы по ID (
#form,#submit); - псевдо-классы:
- динамические (
:hoverи т.д.); - селектор цели (
:target); - селектор по языку (
:lang(en)); - состояния элементов интерфейса (
:enabled,:checked...); - структурные псевдоклассы (
:root,:nth-child); - псевдокласс отрицания (
:not(P)).
- динамические (
- псевдоэлементы (
:before,:first-line); - комбинаторы (
DIV SPAN,P + H1);
Селекторы ниже сгруппированы по спецификациям. Это поможет нам понять какие из них работают везде (из CSS1), какие работают почти везде (из CSS2), а какие кое-где могут и не работать.
Селекторы из CSS1
Самые простые и хорошо всем знакомые:
- обращение к элементу по тегу (
BODY,A,TABLEи т.д.); - по ID (
#main); - по классу (
.header-image); - обращение к потомку через родителя (
UL A,.sidebar .widget); - состояния ссылок
A:link,A:visited,A:hover; - псевдоэлемент для первой строки текста —
P::first-line; - псевдоэлемент для первого символа в тексте —
P::first-letter.
Селекторы из CSS2
В этой спецификации добавилось много интересного:
*— универсальный селектор. Например,* {margin: 0; }уберет отступы у всех элементов на странице.E[foo]— элементы с заданым атрибутом.Например, код:
P[data-content] { border: 2px solid crimson; }выберет только абзацы, у которых есть атрибут data-content:
E[foo="bar"]— элементы, у которых атрибут имеет заданное значение.P[data-content="hello"] { border: 2px solid orange; }E[foo~="bar"]— элемент, который имеет атрибут со списком значений, разделенных пробелом, одно из которых равно заданному.P[data-content~="hello"] { border: 2px solid yellowgreen; }E[foo|="bar"]— элемент, который имеет атрибут со списком значений, разделенных дефисом, который начинается с заданного.P[data-content|="hello"] { border: 2px solid steelblue; }E:first-child— псевдокласс, обращающийся к первому элементу из нескольких внутри родителя.P:first-child { background: gold; }Селектор выбирает первый элемент только если он соответствует заданному тегу или классу и только если он является самым первым потомком родителя.
Для выбора первого элемента из списка дочерних элементов определенного типа существует другой селектор —
:first-of-type, добавленный в CSS3.E:lang(fr)— выбирает элементы на заданном языке. Язык элемента может быть получен из HTTP-заголовков, отдаваемых сервером, изmeta-тега, заданного вhead, либо если у элемента задан атрибутlangНапример, этот код добавит малиновый фон всем элементам, для которых язык определен как русский:
P:lang(ru) { background: crimson; }E::before— генерируемый контент перед заданным элементом.E::after— генерируемый контент после элемента.E > F— выбирает элемент, только если он является прямым потомком родителя (ни во что больше не вложен).DIV > A { background: darkviolet; color: #FFF; }E + F— выбирает второй заданный элемент, который следует непосредственно после первого.P + H3 { background: darkturquoise; color: lightseagreen; }
- Ссылки по теме:
- Сколько весят селекторы?
- CSS-селекторы одной таблицей
- Метки:
- селекторы