Селектор - это часть CSS-правила, которая сообщает браузеру, к какому элементу (или элементам) веб-страницы будет применён стиль.

Термин селектор может относиться к простому селектору (simple selector), составному селектору (compound selector), сложному селектору (complex selector) или списку селекторов.

К простым селекторам относятся:

  • селектор типа
  • универсальный селектор
  • селекторы атрибутов
  • селектор идентификатора
  • селектор класса
  • псевдо-классы
CSS селектор Пример Описание CSS
.class .myClass Выбирает все элементы с классом myClass (class="myClass"). 1
#id #main Выбирает элемент с идентификатором main (id="main"). 1
* Выбор всех элементов. 2
элемент span Выбор всех элементов . 1
элемент,элемент div,span Выбор всех элементов
и всех элементов .
1
[атрибут] Выбирает все элементы с атрибутом title . 2
[атрибут="значение"] Выбирает все элементы с атрибутом title , значение которого в точности совпадает со значением указанным в селекторе (title="cost"). 2
[атрибут~="значение"] Выбирает все элементы с атрибутом title , в значении которого (в любом месте) встречается подстрока (в виде отдельного слова) "один" (title="один и два"). 2
[атрибут|="значение"] Выбор всех элементов с атрибутом lang , значение которого начинается с "ru". 2
[атрибут^="значение"] a Выбор каждого элемента с атрибутом href , значение которого начинается с "https". 3
[атрибут$="значение"] Выбирает все элементы с атрибутом src , значение которого оканчивается на ".png" (src="some_img.png"). 3
[атрибут*="значение"] Выбирает все элементы с атрибутом title , в значении которого (в любом месте) встречается подстрока (в виде отдельного слова или его части) "один" (title="один и два"). 3

Составной селектор - это последовательность простых селекторов, которые не разделены комбинаторами, т. е. за одним селектором сразу идёт следующий. Он выбирает элемент, который соответствует всем простым селекторам, которые он содержит. Селектор типа или универсальный селектор, входящий в составной селектор, должен быть расположен первым в этой последовательности. В составном селекторе допустим только один селектор типа или универсальный селектор.

Span.className p.className1.className2#someId:hover

Сложный селектор - это последовательность селекторов, которые разделены комбинаторами.

Список селекторов - это селекторы, перечисленные через запятую.

Комбинаторы

Для объединения простых CSS селекторов, используются комбинаторы, которые указывают взаимосвязь между простыми селекторами. Существует несколько различных комбинаторов в CSS2, и один дополнительный в CSS3, когда вы их используете, они меняют характер самого селектора.

Псевдо-классы

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

Псевдо-класс Пример Описание CSS
:link a:link Выбор всех не посещенных ссылок. 1
:visited a:visited Выбор всех посещенных ссылок. 1
:active a:active Выбор активной ссылки. 1
:hover a:hover Выбор ссылки при наведении курсора мышки. 1
:focus input:focus Выбор элемента , который находится в фокусе. 2
:first-child p:first-child Выбор каждого элемента

Который является первым дочерним элементом своего родителя.

2
:lang(язык) p:lang(ru) Выбор каждого элемента

С атрибутом lang , значение которого начинается с "ru".

2
:first-of-type p:first-of-type Выбор каждого элемента

Который является первым из элементов

3
:last-of-type p:last-of-type Выбор каждого элемента

Который является последним из элементов

Своего родительского элемента.

3
:only-of-type p:only-of-type Выбор каждого элемента

Который является единственным элементом

Своего родительского элемента.

3
:only-child p:only-child Выбор каждого элемента

Который является единственным дочерним элементом своего родительского элемента.

3
:nth-child(n) p:nth-child(2) Выбор каждого элемента

Своего родительского элемента.

3
:nth-last-child(n) p:nth-last-child(2) Выбор каждого элемента

Который является вторым дочерним элементом своего родительского элемента, считая от последнего дочернего элемента.

3
:nth-of-type(n) p:nth-of-type(2) Выбор каждого элемента

Который является вторым дочерним элементом

Своего родительского элемента.

3
:nth-last-of-type(n) p:nth-last-of-type(2) Выбор каждого элемента

Который является вторым дочерним элементом

Своего родительского элемента, считая от последнего дочернего элемента.

3
3
:not(селектор) :not(p) Выбор всех элементов, кроме элемента

.

3

Псевдо-элементы

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

Последнее обновление: 21.04.2016

Определение стиля начинается с селектора. Например:

Div{ width:50px; /* ширина */ height:50px; /* высота */ background-color:red; /* цвет фона */ margin: 10px; /* отступ от других элементов */ }

В данном случае селектором является div . Ряд селекторов наследуют название форматируемых элементов, например, div, p, h2 и т. д. При определении такого селектора его стиль будет применяться ко всем элементам соответствующих данному селектору. То есть выше определенный стиль будет применяться ко всем элементам

на веб-странице:

Селекторы CSS

Селекторы CSS

Здесь на странице 3 элемента div, и все они будут стилизованы:

Классы

Иногда для одних и тех же элементов требуется различная стилизация. И в этом случае мы можем использовать классы.

Для определения селектора класса в CSS перед названием класса ставится точка:

RedBlock{ background-color:red; }

Название класса может быть произвольным. Например, в данном случае название класса - "redBlock". Однако при этом в имени класса разрешается использовать буквы, числа, дефисы и знаки подчеркивания, причем начинать название класса должно обязательно с буквы.

Также стоит учитывать регистр имен: названия "article" и "ARTICLE" будут представлять разные классы.

После определения класса мы можем его применить к элементу с помощью атрибута class . Например:

Определим и используем несколько классов:

Классы CSS

Классы CSS

Идентификаторы

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

Определение стилей для идентификаторов аналогично определению классов, только вместо точки ставится символ решетки #:

Идентификаторы CSS

Основное содержимое

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

Универсальный селектор

Кроме селекторов тегов, классов и идентификаторов в css также есть так называемый универсальный селектор , который представляет знак звездочки (*). Он применяет стили ко всем элементам на html-странице:

*{ background-color: red; }

Стилизация группы селекторов

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

Селекторы CSS

CSS3

Селекторы

Группа селекторов

Некоторый текст...

Группа селекторов может содержать как селекторы тегов, так и селекторы классов и идентификаторов, например:

H1, #header, .redBlock{ color: red; }

Не все, но более, чем достаточно

Люди, изучающие XHTML, а также CSS по книгам, нередко сталкиваются с тем, что события CSS описаны не полностью. В частности, описываются только такие события, как hover, active, visited. Событий CSS гораздо больше и возможности, которые они дают, очень большие.

Здесь не приводится полный список событий, а только те, которые реально понадобятся современному веб-дизайнеру.

Если Вы назначаете блоку событие after, то после блока будет выведен сгенерированный код, определенный в таблице стилей. Для определения кода используется команда CSS - content , синтаксис которой - content:" XHTML код ".

Т.е. вся команда может выгладеть так:
#someId:after
{content:"XHTML код"} :before Работает также, как и after, но выводит код до элемента:first-child Задает стиль для первого дочернего элемента какого-либо другого элемента.

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

body ol li:first-child{...}(т.е. Во всех списках ol первый элемент li, но не ul, будет отображен с заданными настройками стилей)

:last-child Задает стиль для последнего дочернего элемента какого-либо другого элемента. :focus Задает смтиль для элементов форм, которые получают фокус, т.е. те, по которым вы щелкаете. Например, можно сделать активное поле для ввода текста отличным от неактивного поля. :hover Стиль для элемента, на который наведен курсор. Может использоваться со всеми блоками и текстом (раньше мы рассматривали только ссылки). :lang(x ) Ставит элементу в соответствие определенный язык, никак не изменяя содержимое элемента. Такой тег можно использовать, например, для выделения ссылок на различные источники. Вместо x ставится двузначное интернациональное обозначение языка, или иначе, название доменной зоны. Например, для России это ru , для Америки us , и так далее. Если элементу нужно поставить в определение несколько языков сразу, они должны разделяться дефисом без пробелов (в порядке понижения важностей стилей, которые определяет каждый язык). :visited Задает стиль посещенной ссылки:nth-child(x) Задает стиль для определенных элементов или одного определенного элемента. x может быть выражен:

  • числом. В этом случае выделен будет только 1 элемент
  • выражениями odd(все нечетные элементы) или even(все четные элементы).
  • выражением an+b, где n не изменяется, a и b - произвольные числа. Например, 7n+4. Будут выделены все элементы, дающие при делении на 7 остаток 4. (4, 11, 18 и т.д.) При этом, если a или b равны 0, то их можно не указывать. Отсчет n элементов ведется с 0 до n-1
Внимание! Это поведение(селектор) есть только в новом стандарте CSS 3 и поддерживается только современными браузерами. :nth-last-child(х) То же, что и nth-child(x), но отсчет ведется с последнего элемента n-1 до 0. :emply Добавляет стиль к элементу, у которого нет потомков, т.е. к пустому тегу. :enabled Стиль для выбранного, отмеченного элемента формы. Только для элементов button, input, optgroup, option, select, textarea. Это и два последующих селектора есть только в CSS 3:disabled То же, что и enabled, но для неактивированных элементов форм:checked Только для radio и checkbox. Задает стиль для выбранных элементов. :first-letter Задает стиль для первой буквы в тексте(т.н. буквицы). Поддерживаются только команды CSS оформления, но не разметки. :first-line То же, но для первой строки текста.

Углубленное изучение селекторов CSS

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

Мы упоминали наследственность элементов. Теперь мы разберем ее более глубоко.

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

Комбинаторы (создание связи между стилями на основе наследственности)
Adjacent Sibling (+) Этот комбинатор определяет 2 элемента, которые следуют сразу друг за другом (между ними нет других элементов с тем же родителем, что и те 2 элемента, но могут быть наследственные им элементы) и имеют одного родителя. Стиль применяется сразу к обоим элементам. Синтаксис записи(пробелы не учитываются)
E+F{...}
где E - первый элемент, F - второй элемент. Например,
h1+h2{font-family:serif}
Эта запись определит стиль только для последующих друг за другом элементов h1 и h2, которые имеют одного родителя. Если после h2 стоит другой тег h2, то к нему стиль не применяется.
Child (>) Combinator Комбинатор определяет все элементы, являющиеся прямыми потомками одного элемента. Поддерживает несколько уровней вложенности, например:
body > div > p{...}
То есть, стиль,стиль будет применен только к параграфам, которые являются потомками всех блоков div, которые непосредственно принадлежат тегу body.
Descendant Определяет произвольную связь между элементами. То есть, элементы не должны быть прямыми наследниками, а просто наследниками одного элемента. Синтаксис(пробел обязателен):
E F{...}
Например:
table.table1 td{...}
То есть стиль будет определен во всех столбцах-потомках таблицы с классом table1, даже если внутри этой таблицы есть другие таблицы. К столбцам таблиц-наследников также будет применен стиль.
General Sibling (~) Синтаксис E~F. Комбинатор выполняет такую же функцию, как и Adjacent Sibling, за исключением того, что между E и F может быть любое количество элементов того же уровня вложенности и F может быть не один.
Атрибуты. Селекторы атрибутов. Создание собственных атрибутов
Equality [=] У каждого тега может быть атрибут (например, атрибут id, который может быть практически у любого тега, или атрибут width(только для блоков)). Вы можете создать свой атрибут, представляющий собой текстовую строку. Например, attr. Создание собственных атрибутов пригодится для селекторов атрибутов в CSS. Атрибуты могут использоваться вместе с комбинаторами.
Equality определяет стиль для всех элементов, определенный атрибут которых в точности равен указанному значению. Синтаксис:
{...}
Как видим, здесь не определены теги. Стили определяются для всех элементов, у которых атрибут att равен значению val . Att и val могут принимать значения идентификаторов (например, для att могут быть любые изученные атрибуты, для val - none, block и т.д.) и строковые значения, т.е. просто слово (например, будет определять все элементы с записью <... attr="test" ...="">).
Existence Определяет все элементы, имеющие атрибут, независимо от его значения. Синтаксис:
{...}
att - атрибут(или строковое значение, т.е. собственный атрибут)
Prefix [^=] Определяет элементы, у которых есть атрибут att, принимающий значение, начинающееся с val. Синтаксис:
{...}
att - атрибут(или строковое значение, т.е. собственный атрибут), val - значение атрибута
Очень хороший пример: Википедия. На этом сайте все ссылки, ведущие на другие сайты, кроме Википедии, имеют позади значок (стрелку). Вот пример записи, позволяющий записать такой стиль:
:after {content""}
Suffix [$=] Определяет элементы, у которых есть атрибут att, принимающий значение, заканчивающееся на val. Синтаксис
{...}
Такой атрибут недавно начали использовать, чтобы перед различными ссылками ставить картинки, которые визуально укажут пользователю, к какому файлу, странице его отошлет ссылка. Например, перед ссылками на PDF файлы можно поставить значок PDF.Пример:
:before {content:""}
Substring [*=] Синтаксис записи:
{...}
Отбирает все элементы с атрибутом att, в значение которого входит подстрока val. Например, "54" - подстрока "13254 6", "val" - подстрока "value" и т.д.
Whitespace [~=] Whitespace - то же, что и Substring, однако подстрока должна быть словом, т.е. окружена в сстроке пробелами.
Hyphen [|=] То же, что и Substring, однако подстрока должна быть частью атрибута и разделяться с другой частью (частями) дефисом. Пример:
{...}
отберет все теги с атрибутом lang, в значении которого есть en, например en-ru, ru-de-en и т.д.

На этом заканчивается изучение XHTML+CSS. Далее уроки пойдут про JavaScript.

Селекторы являются одной, если не самой важной частью CSS. Они формируют каскад и определяют, как стили должны применяться к элементам страницы.

До недавнего времени внимание CSS никогда действительно не обращалось на селекторы. Время от времени появлялись небольшие обновления в пределах спецификации селекторов, но никогда не было никаких реальных новаторских улучшений. К счастью, в последнее время всё больше внимания уделяется селекторам, так что взглянем на то, как выбирать разные типы элементов и элементы в разных состояниях.

CSS3 принёс новые селекторы, открывая целый новый мир возможностей и улучшений существующей практики. Здесь мы обсудим селекторы , как старые так и новые, а также как наилучшим образом их использовать.

Типовые селекторы

Перед глубоким погружением в некоторые более сложные селекторы и те, которые предлагаются в CSS3, давайте взглянем на некоторые наиболее типовые селекторы на сегодня. Эти селекторы включают в себя селекторы типа, классы и идентификаторы.

Селектор типа идентифицирует элемент, основанный на его типе, в частности, как этот элемент объявлен в HTML. Селектор класса идентифицирует элемент, основанный на значении атрибута class , который может повторно применяться к нескольким элементам по мере необходимости и помогает делиться популярными стилями. И, наконец, идентификатор определяет элемент, основанный на значении атрибута id , который является уникальным и должен быть использован на странице только один раз.

H1 {...} .tagline {...} #intro {...}

Дочерние селекторы

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

Селектор потомка

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

Селектор article h2 является селектором потомка и выбирает только элементы

, которые находятся внутри элемента
. Обратите внимание, независимо от того, где живёт элемент

, пока он находится внутри элемента
, он всегда будет выбран. Кроме того, любой элемент

за пределами элемента
не будет выбран.

Ниже приведены заголовки, из которых выбраны строки 3 и 5.

Article h2 {...}

...

Этот заголовок будет выбран

Этот заголовок будет выбран

Прямой дочерний селектор

Порой селекторы потомка заходят слишком далеко, выбирая больше, чем хотелось бы. Иногда должны быть выбраны только прямые дети родительского элемента, а не каждый экземпляр элемента вложенный глубоко внутри предка. В этом случае может быть использован прямой дочерний селектор путём размещения знака больше (>) между родительским и дочерним элементом в селекторе.

Например, article > p является прямым дочерним селектором только когда элементы

Находятся непосредственно внутри элемента

. Любой элемент <р> размещённый вне элемента
или вложенный внутри другого элемента, кроме
, не будет выбран.

Ниже, абзац на строке 3, является единственным прямым потомком его родителя

, поэтому и выбран.

Article > p {...}

Этот абзац будет выбран

Родственные селекторы

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

Общий родственный селектор

Общий родственный селектор позволяет выбрать элементы, которые будут отобраны на основе их родственных элементов, т. е. те, у которых один и тот же общий родитель. Они создаются с помощью символа тильды (~) между двумя элементами внутри селектора. Первый элемент определяет, что второй элемент должен быть родственным с ним, и у обоих должен быть один и тот же родитель.

Селектор h2 ~ p - это общий родственный селектор, он ищет элементы

Которые следуют после любых элементов

в том же родителе. Чтобы элемент

Был выбран, он должен идти после любого элемента

.

Абзацы в строках 5 и 9 выбраны, поскольку они идут после заголовка в дереве документа и у них тот же родитель, что и у родственного заголовка.

H2 ~ p {...}

...

Этот абзац будет выбран

Этот абзац будет выбран

Соседние селекторы

Иногда может быть желательно иметь немного больше контроля, в том числе возможность выбрать родственный элемент, который следует непосредственно за другим родственным элементом. Соседний селектор будет выбирать только родственные элементы, непосредственно следующие за другим родственным элементом. Вместо символа тильды, как в случае с общим родственным селектором, соседний селектор использует символ плюс (+) между двумя элементами в селекторе. Опять же, первый элемент определяет, что второй элемент должен непосредственно следовать после него и быть ему родственным и у обоих элементов должен быть один и тот же родитель.

Взглянем на соседний селектор h2 + p . Будут выбраны только элементы

Идущие непосредственно после элементов

. У обоих также должен быть один и тот же родительский элемент.

Абзац на строке 5 выбирается, так как непосредственно следует после его родственного заголовка и у них один общий родительский элемент.

H2 + p {...}

...

Этот абзац будет выбран

Пример соседних селекторов

Input { display: none; } label, ul { border: 1px solid #cecfd5; border-radius: 6px; } label { color: #0087cc; cursor: pointer; display: inline-block; font-size: 18px; padding: 5px 9px; transition: all .15s ease; } label:hover { color: #ff7b29; } input:checked + label { box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.15); color: #9799a7; } nav { max-height: 0; overflow: hidden; transition: all .15s ease; } input:checked ~ nav { max-height: 500px; } ul { list-style: none; margin: 8px 0 0 0; padding: 0; width: 100px; } li { border-bottom: 1px solid #cecfd5; } li:last-child { border-bottom: 0; } a { color: #0087cc; display: block; padding: 6px 12px; text-decoration: none; } a:hover { color: #ff7b29; }

Селекторы атрибутов

Некоторые рассмотренные ранее типовые селекторы также могут быть определены как селекторы атрибутов, в котором элемент выбирается на основе значения class или id . Эти селекторы атрибутов class и id широко используются и довольно мощные, но это лишь начало. Другие селекторы атрибутов появились в последние годы, в частности, сделали большой скачок вперед вместе с CSS3. Теперь элементы могут быть выбраны на основе того, присутствует ли атрибут и какое значение он содержит.

Селектор наличия атрибута

Первый селектор атрибута определяет элемент на основе того, включен ли этот атрибут или нет, независимо от его фактического значения. Чтобы выбрать элемент основываясь на том, присутствует атрибут или нет, просто включите имя атрибута в квадратных скобках () в селекторе. Квадратные скобки могут идти после любого селектора типа или класса, в зависимости от желаемого уровня специфичности.

A {...}

...

Селектор атрибута =

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

A {...}

...

Селектор атрибута *=

Когда мы пытаемся найти элемент на основе части значения атрибута, но не точного совпадения, может быть использован символ звёздочки (*) в квадратных скобках селектора. Звёздочка должна идти сразу после имени атрибута, непосредственно перед знаком равенства. Это означает, что следующее за ним значение только должно появиться или содержаться в значении атрибута.

A {...}

...

Селектор атрибута ^=

В дополнение к выбору элемента на основе того, что значение атрибута содержит указанный текст, можно также выбрать элемент, основанный на том, с чего начинается значение атрибута. Использование символа циркумфлекса (^) в квадратных скобках селектора между именем атрибута и знаком равенства означает, что значение атрибута должно начинаться с указанного текста.

A {...}

...

Селектор атрибута $=

Противоположностью предыдущего селектора является селектор атрибутов, где значение оканчивается определённым текстом. Вместо использования символа ^ применяется знак доллара ($) в квадратных скобках селектора между именем атрибута и знаком равенства. Использование знака доллара означает, что значение атрибута должно заканчиваться указанным текстом.

A {...}

...

Селектор атрибута ~=

Иногда значения атрибутов могут быть расположены через пробел друг от друга, в которых только одно из слов должно подходить для создания выборки. В этом случае использование символа тильды (~) в квадратных скобках селектора между именем атрибута и знаком равенства означает значение атрибута разделённое пробелами, из которых одно слово точно соответствует указанному значению.

A {...}

...

Селектор атрибута |=

Когда значение атрибута разделено дефисом, а не пробелами, может быть использован символ вертикальной линии (|) в квадратных скобках селектора между именем атрибута и знаком равенства. Вертикальная линия означает, что значение атрибута может быть разделено дефисом, однако слова должны начинаться с указанного значения.

A {...}

...

Пример селекторов атрибутов

Ul { list-style: none; margin: 0; padding: 0; } a { background-position: 0 50%; background-repeat: no-repeat; color: #0087cc; padding-left: 22px; text-decoration: none; } a:hover { color: #ff7b29; } a { background-image: url("images/pdf.png"); } a { background-image: url("images/doc.png"); } a { background-image: url("images/image.png"); } a { background-image: url("images/audio.png"); } a { background-image: url("images/video.png"); }

Обзор селекторов атрибутов
Пример Название Описание
a Селектор наличия атрибута Выбирает элемент если данный атрибут присутствует.
a Селектор атрибута = Выбирает элемент, если значение данного атрибута в точности соответствует указанному.
a Селектор атрибута *= Выбирает элемент, если значение данного атрибута содержит по крайней мере один экземпляр указанного текста.
a Селектор атрибута ^= Выбирает элемент, если значение данного атрибута начинается с указанного текста.
a Селектор атрибута $= Выбирает элемент, если значение данного атрибута заканчивается указанным текстом.
a Селектор атрибута ~= Выбирает элемент, если значение данного атрибута разделено пробелами и точно совпадает с одним указанным словом.
a Селектор атрибута |= Выбирает элемент, если значение данного атрибута разделено дефисом и начинается с указанного слова.

Псевдоклассы

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

Псевдоклассы ссылок

Некоторые основные псевдоклассы включают в себя два псевдокласса, вращающихся вокруг ссылок. Это псевдоклассы :link и :visited и они определяют, что ссылка была или не была посещена. Чтобы задать стиль ссылки, которая ещё не была посещена, в игру вступает псевдокласс :link , а псевдокласс :visited задаёт стиль ссылок, которые пользователь уже посетил на основе их истории просмотра.

A:link {...} a:visited {…}

Псевдоклассы действия пользователя

К элементу могут динамически применяться основанные на действиях пользователей разные псевдоклассы, которые включают в себя :hover , :active и :focus . Псевдокласс:hover применяется к элементу, когда пользователь двигает курсор над элементом, наиболее часто это используется со ссылками. Псевдокласс:active применяется к элементу, когда пользователь приводит в действие элемент, например, при щелчке по нему. И, наконец, псевдокласс:focus применяется к элементу, когда пользователь сделал элемент точкой внимания страницы, часто с помощью клавишы Tab , переходя от одного элемента к другому.

A:hover {...} a:active {...} a:focus {...}

Псевдоклассы состояния интерфейса

Подобно ссылкам существуют также некоторые псевдоклассы, связанные с состоянием элементов пользовательского интерфейса, в частности, внутри форм. Эти псевдоклассы включают в себя :enabled , :disabled , :checked и :indeterminate .

Псевдокласс :enabled выбирает поля, которые включены и доступны для использования, а псевдокласс :disabled выбирает поля, которые содержат привязанный к ним атрибут disabled . Многие браузеры по умолчанию затемняют такие заблокированные поля для информирования пользователей о том, что поле не доступно для взаимодействия, однако их стиль может быть настроен по желанию через псевдокласс :disabled .

Input:enabled {...} input:disabled {...}

Последние два элемента состояния интерфейса, псевдоклассы :checked и :indeterminate вращаются вокруг флажков и переключателей. Псевдокласс :checked выбирает флажки или переключатели, которые, как вы можете ожидать, помечены. Когда ни один флажок или переключатель не помечен и не выбран, то он живёт в неопределённом состоянии, для которого может быть использован псевдокласс :indeterminate для нацеливания на подобные элементы.

Input:checked {...} input:indeterminate {…}

Псевдоклассы структуры и положения

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

:first-child, :last-child и:only-child

Первые структурные псевдоклассы, которые вам скорее всего попадутся, это :first-child , :last-child и :only-child . Псевдокласс :first-child выберет элемент, если это первый ребёнок в родителе, в то время как псевдокласс :last-child выберет элемент, если он последний в родителе. Эти псевдоклассы идеально подходят для выбора первого или последнего элемента в списке и др. Кроме того, :only-child выберет элемент, если он является единственным элементом в родителе. В качестве альтернативы, псевдокласс :only-child может быть записан как :first-child:last-child , однако у :only-child ниже специфичность.

Здесь селектор li:first-child определяет первый пункт списка, в то время как li:last-child определяет последний пункт списка, таким образом, выбираются строки 2 и 10. Селектор div:only-child ищет

, который является единственным ребёнком в родительском элементе, без каких-либо других родственных элементов. В этом случае выбирается строка 4, т. к. это единственный
в данном пункте списка.

Li:first-child {...} li:last-child {...} div:only-child {...}

  • Этот пункт будет выбран
  • Этот div будет выбран
  • ...
    ...
  • Этот пункт будет выбран

:first-of-type, :last-of-type и:only-of-type

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

Псевдокласс :first-of-type выберет первый элемент своего типа внутри родителя, в то время как псевдокласс :last-of-type выберет последний элемент этого типа внутри родителя. Псевдокласс :only-of-type выберет элемент, если он является единственным такого типа в родителе.

В приведённом ниже примере псевдоклассы p:first-of-type и p:last-of-type выберут, соответственно, первый и последний абзацы в статье, независимо от того, являются ли они на самом деле первыми или последними детьми в статье. Строки 3 и 6 выбраны этими селекторами. Селектор img:only-of-type определяет изображение в строке 5, как единственное изображение появляющееся в статье.

P:first-of-type {...} p:last-of-type {...} img:only-of-type {...}

...

Этот абзац будет выбран

Этот абзац будет выбран

...

Наконец, есть несколько псевдоклассов структуры и положения, которые выбирают элементы, основанные на номере или алгебраическом выражении. Эти псевдоклассы включают в себя :nth-child(n) , :nth-last-child(n) , :nth-of-type(n) и :nth-last-of-type(n) . Все эти уникальные псевдоклассы начинаются с nth и принимают число или выражение внутри круглых скобок, которое обозначается символом n.

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

Использование чисел и выражений в псевдоклассах

Как уже упоминалось, использование конкретного числа в псевдоклассе вычисляет с начала или с конца дерева документа и выбирает один соответствующий элемент. Например, селектор li:nth-child(4) выберет четвёртый пункт в списке. Подсчёт начинается с первого пункта списка и увеличивается на единицу для каждого пункта списка, пока, наконец, не обнаружит четвёртый пункт и выберет его. При указании конкретного числа оно должно быть положительным.

Выражения для псевдоклассов бывают в формате an, an+b, an-b, n+b, -n+b и -an+b. То же самое выражение может быть переведено и читаться как (a×n)±b. Переменная a обозначает множитель, с учётом которого будут вычисляться элементы, в то время как переменная b обозначает, откуда будет начинаться или происходить отсчёт.

Например, селектор li:nth-child(3n) будет определять каждый третий элемент пункта списка. Использование этого выражения соответствует 3×0, 3×1, 3×2 и так далее. Как вы можете видеть, результаты этого выражения выбирают третий, шестой и каждый элемент кратный трём.

Кроме того, в качестве значений могут быть использованы ключевые слова odd и even . Как и следовало ожидать, они будут выбирать, соответственно, нечётные или чётные элементы. Если ключевые слова не привлекают, то выражение 2n+1 выберет все нечётные элементы, а выражение 2n выберет все чётные элементы.

Селектор li:nth-child(4n+7) определит каждый четвёртый пункт списка, начиная с седьмого пункта. Опять же, использование этого выражения эквивалентно (4×0)+7, (4×1)+7, (4×2)+7 и так далее. Результаты этого выражения приведут к выбору седьмого, одиннадцатого, пятнадцатого и каждого четвёртого элемента.

При использовании аргумента n без числа впереди, переменная a расценивается как равная 1. Селектор li:nth-child(n+5) выберет каждый пункт списка, начиная с пятого, оставив первые четыре пункта списка не выбранными. В выражении это разбирается как (1×0)+5, (1×1)+5, (1×2)+5 и так далее.

Для создания более сложных вещей могут быть задействованы отрицательные числа. Например, селектор li:nth-child(6n-4) будет отсчитывать каждый шестой пункт списка, начиная с -4, выбрав второй, восьмой, четырнадцатый пункты списка и так далее. Тот же селектор li:nth-child(6n-4) также может быть записан как li:nth-child(6n+2) , без использования отрицательной переменной b.

Отрицательная переменная или отрицательный аргумент n должен сопровождаться положительной переменной b. Когда аргументу n предшествует отрицательная переменная a, то переменная b определяет, насколько высоко будет достигнут отсчёт. Например, селектор li:nth-child(-3n+12) выберет каждый третий пункт списка в первых двенадцати пунктах. Селектор li:nth-child(-n+9) выберет первые девять пунктов списка, так как переменная a без заявленного числа по умолчанию равна -1.

:nth-child(n) и:nth-last-child(n)

При общем понимании того, как работают числа и выражения в псевдоклассах, давайте взглянем на полезные псевдоклассы, где эти числа и выражения могут использоваться, первыми из которых являются :nth-child(n) и :nth-last-child(n) . Эти псевдоклассы работают похоже на :first-child и :last-child , в том смысле что они рассматривают и считают все элементы в родителе и выбирают только определённый элемент. :nth-child(n) работает с начала дерева документа, а :nth-last-child(n) работает с конца дерева документа.

Используя псевдокласс :nth-child(n) давайте взглянем на селектор li:nth-child(3n) . Он определяет каждый третий пункт списка, таким образом, будут выбраны строки 4 и 7.

Li:nth-child(3n) {…}

  • Этот пункт будет выбран
  • Этот пункт будет выбран

Использование другого выражения в псевдоклассе :nth-child(n) даст другую выборку. Селектор li:nth-child(2n+3) , к примеру, определит каждый второй пункт списка, начиная с третьего. В результате будут выбраны пункты в строках 4 и 6.

Li:nth-child(2n+3) {...}

  • Этот пункт будет выбран
  • Этот пункт будет выбран

Очередное изменение выражения, на этот раз с отрицательным значением, даст новый выбор. Здесь селектор li:nth-child(-n+4) определяет четыре верхних пункта списка, оставляя остальные пункты не выделенными, таким образом будут выбраны строки со 1 по 4.

Li:nth-child(-n+4) {...}

  • Этот пункт будет выбран
  • Этот пункт будет выбран
  • Этот пункт будет выбран
  • Этот пункт будет выбран

Добавление отрицательного числа перед аргументом n снова изменяет выбор. Здесь селектор li:nth-child(-2n+5) определяет каждый второй пункт списка из первых пяти пунктов, таким образом, будут выбраны пункты в строках 2, 4 и 6.

Li:nth-child(-2n+5) {...}

  • Этот пункт будет выбран
  • Этот пункт будет выбран
  • Этот пункт будет выбран

Изменение псевдокласса :nth-child(n) на :nth-last-child(n) переключает направление счёта, теперь подсчёт начинается с конца дерева документа. Селектор li:nth-last-child(3n+2) , к примеру, определяет каждый третий пункт списка, начиная со второго по последний, двигаясь по направлению к началу списка. Здесь выбраны пункты списка в строках 3 и 6.

Li:nth-last-child(3n+2) {...}

  • Этот пункт будет выбран
  • Этот пункт будет выбран

:nth-of-type(n) и:nth-last-of-type(n)

Псевдоклассы :nth-of-type(n) и :nth-last-of-type(n) очень похожи на :nth-child(n) и :nth-last-child(n) , однако вместо того чтобы считать каждый элемент внутри родителя псевдоклассы :nth-of-type(n) и :nth-last-of-type(n) учитывают только элементы своего собственного типа. Например, при подсчете абзацев в статье, псевдоклассы :nth-of-type(n) и :nth-last-of-type(n) пропустят любые заголовки,

или разные элементы, которые не являются абзацами, в то время как :nth-child(n) и :nth-last-child(n) будут считать каждый элемент, независимо от его типа, выбирая только те из них, которые соответствуют элементу в указанном селекторе. Кроме того, все те же возможные выражения, применяемые в :nth-child(n) и :nth-last-child(n) также доступны в псевдоклассах :nth-of-type(n) и :nth-last-of-type(n) .

Используя псевдокласс :nth-of-type(n) в селекторе p:nth-of-type(3n) мы можем определить каждый третий абзац в родителе, независимо от других родственных элементов внутри родителя. Здесь выбираются абзацы в строках 5 и 9.

P:nth-of-type(3n) {...}

...

Этот абзац будет выбран

...

Этот абзац будет выбран

Как и с псевдоклассами :nth-child(n) и :nth-last-child(n) , основное различие между :nth-of-type(n) и :nth-last-of-type(n) состоит в том, что :nth-of-type(n) считает элементы с начала дерева документа, а :nth-last-of-type(n) считает элементы с конца дерева документа.

Используя псевдокласс :nth-last-of-type(n) мы можем записать селектор p:nth-last-of-type(2n+1) , который определяет каждый второй абзац с конца родительского элемента, начиная с последнего абзаца. Здесь выбираются абзацы в строках 4, 7 и 9.

P:nth-last-of-type(2n+1) {...}

...

Этот абзац будет выбран

...

Этот абзац будет выбран

Этот абзац будет выбран

Псевдокласс:target

Псевдокласс :target используется для стилизации элементов, когда значение атрибута id совпадает с указателем фрагмента URI. Такой фрагмент в URI распознаётся с помощью символа решётки (#) и того, что непосредственно следует за ним. Адрес http://example.com/index.html#hello включает в себя указатель hello. Когда он совпадает со значением атрибута id у элемента на странице, к примеру,

Псевдокласс:empty

Псевдокласс :empty позволяет выбрать элементы, которые не содержат детей или текст. Комментарии, инструкции по обработке и пустой текст не считаются детьми и не рассматриваются как таковые.

Использование псевдокласса div:empty определит

без детей или текста. Ниже выбраны
в строках 2 и 3, поскольку они совершенно пустые. Даже несмотря на то, что второй
содержит комментарий, он не считается ребёнком, таким образом оставляя
пустым. Первый
содержит текст, третий содержит один пробел, а последний содержит дочерний элемент , таким образом, они все исключены и не выбраны.

Div:empty {...}

Привет

Псевдокласс:not

Псевдокласс :not(x) принимает аргумент и отфильтровывает выборку, которая будет сделана. Селектор p:not(.intro) использует псевдокласс :not для определения каждого абзаца без класса intro . Элемент абзаца определяется в начале селектора, затем следует псевдокласс :not(x) . Внутри скобок идёт селектор отрицания, в данном случае класс intro .

Ниже оба селектора div:not(.awesome) и :not(div) используют псевдокласс :not(x) . Селектор div:not(.awesome) определяет любой

без класса awesome , в то время как селектор :not(div) определяет элемент, который не является
. В результате выбирается
в строке 1, а также два раздела в строках 3 и 4. Единственный не выбранный элемент это
с классом awesome , так как он выходит за пределы двух псевдоклассов.

Div:not(.awesome) {...} :not(div) {...}

Этот div будет выбран
...
Этот раздел будет выбран Этот раздел будет выбран

Пример с псевдоклассами

...
Номер Игрок Позиция Рост Вес
8 Марко Белинелли G 6-5 195
5 Карлос Бузер F 6-9 266

Table { border-collapse: separate; border-spacing: 0; width: 100%; } th, td { padding: 6px 15px; } th { background: #42444e; color: #fff; text-align: left; } tr:first-child th:first-child { border-top-left-radius: 6px; } tr:first-child th:last-child { border-top-right-radius: 6px; } td { border-right: 1px solid #c6c9cc; border-bottom: 1px solid #c6c9cc; } td:first-child { border-left: 1px solid #c6c9cc; } tr:nth-child(even) td { background: #eaeaed; } tr:last-child td:first-child { border-bottom-left-radius: 6px; } tr:last-child td:last-child { border-bottom-right-radius: 6px; }

Обзор псевдоклассов
Пример Название Описание
a:link Псевдокласс ссылок Выбирает ссылки, которые не были просмотрены пользователем.
a:visited Псевдокласс ссылок Выбирает ссылки, которые были посещены пользователем.
a:hover Псевдокласс действия Выбирает элемент, когда пользователь наводит на него курсор.
a:active Псевдокласс действия Выбирает элемент, когда пользователь активирует его.
a:focus Псевдокласс действия Выбирает элемент, когда пользователь сделал его точкой внимания.
input:enabled Псевдокласс состояния Выбирает элемент в доступном состоянии.
input:disabled Псевдокласс состояния Выбирает элемент в отключенном состоянии, посредством атрибута disabled .
input:checked Псевдокласс состояния Выбирает флажок или переключатель, который был помечен.
input:indeterminate Псевдокласс состояния Выбирает флажок или переключатель, который не был помечен или не помечен, оставляя его в неопределённом состоянии.
li:first-child Структурный псевдокласс Выбирает первый элемент в родителе.
li:last-child Структурный псевдокласс Выбирает последний элемент в родителе.
div:only-child Структурный псевдокласс Выбирает единственный элемент в родителе.
p:first-of-type Структурный псевдокласс Выбирает первый элемент своего типа в родителе.
p:last-of-type Структурный псевдокласс Выбирает последний элемент своего типа в родителе.
img:only-of-type Структурный псевдокласс Выбирает единственный элемент своего типа в родителе.
li:nth-child(2n+3) Структурный псевдокласс Выбирает элемент, который соответствует заданному числу или выражению, считая все элементы с начала дерева документа.
li:nth-last-child(3n+2) Структурный псевдокласс Выбирает элемент, который соответствует заданному числу или выражению, считая все элементы с конца дерева документа.
p:nth-of-type(3n) Структурный псевдокласс Выбирает элемент, который соответствует заданному числу или выражению, считая только элементы этого типа с начала дерева документа.
p:nth-last-of-type(2n+1) Структурный псевдокласс Выбирает элемент, который соответствует заданному числу или выражению, считая только элементы этого типа с конца дерева документа.
section:target Псевдокласс:target Выбирает элемент, у которого значение атрибута id совпадает с указателем фрагмента URI.
div:empty Псевдокласс:empty Выбирает элемент, который не содержит каких-либо детей или текста.
div:not(.awesome) Псевдокласс:not Выбирает элемент не представленный заявленным аргументом.

Псевдоэлементы

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

Текстовые псевдоэлементы

Первыми реализованными псевдоэлементами были текстовые псевдоэлементы :first-letter и :first-line . Псевдоэлемент :first-letter определяет первую букву текста внутри элемента, в то время как :first-line определяет первую строку текста внутри элемента.

В демонстрации ниже первая буква абзаца с классом alpha задана большим размером шрифта и оранжевым цветом, так же как и первая строка абзаца с классом bravo . Эта выборка сделана с помощью текстовых псевдоклассов :first-letter и :first-line , соответственно.

Alpha:first-letter, .bravo:first-line { color: #ff7b29; font-size: 18px; }

Lorem ipsum dolor...

Integer eget enim...

Демонстрация текстовых псевдоэлементов

Псевдоэлементы, генерируемые содержимое

Псевдоэлементы :before и :after создают новые строчные псевдоэлементы только внутри выбранного элемента. Чаще всего эти псевдоэлементы используются в сочетании со свойством content , чтобы добавить незначительную информацию на страницу, однако, это не всегда так. Дополнительное применение этих псевдоэлементов может добавить компоненты пользовательского интерфейса на страницу без необходимости загромождать документ несемантическими элементами.

Псевдоэлемент :before создаёт псевдоэлемент до или впереди выбранного элемента, в то время как :after создаёт псевдоэлемент после или позади выбранного элемента. Эти псевдоэлементы выводятся вложенными внутри выбранного элемента, а не за его пределами. Ниже псевдоэлемент :after используется для отображения значения атрибута href у ссылок в круглых скобках после самой ссылки. Такая информация полезна, но, в конечном итоге, не всякий браузер поддерживает эти псевдоэлементы.

A:after { color: #9799a7; content: " (" attr(href) ")"; font-size: 11px; }

Искать в Интернете Изучите, как создать сайт

Демонстрация псевдоэлементов, генерируемых содержимое

Псевдоэлемент::selection

Псевдоэлемент ::selection определяет выделенную пользователем часть документа. Выделение затем может быть стилизовано, но только с помощью свойств color , background , background-color и text-shadow . Стоит отметить, что свойство background-image игнорируется. В то же время сокращённое свойство background может быть использовано для добавления цвета, но любые изображения будут игнорироваться.

Двоеточие (:) и двойное двоеточие (::)

Псевдоэлемент ::selection был добавлен в CSS3 в попытке отделить псевдоклассы от псевдоэлементов с помощью двойного двоеточия, которое было добавлено к псевдоэлементам. К счастью, большинство браузеров будут поддерживать оба значения, одиночные или двойные двоеточия у псевдоэлементов, однако псевдоэлемент ::selection всегда должен начинаться с двойного двоеточия.

При выделении любого текста в демонстрации ниже фон становится оранжевым благодаря псевдоэлементу ::selection . Также обратите внимание на ::-moz-selection . Префикс от Mozilla был добавлен, чтобы обеспечить лучшую поддержку для всех браузеров.

::-moz-selection { background: #ff7b29; } ::selection { background: #ff7b29; }

Демонстрация псевдоэлементов

Продолжить чтение

Arrow { background: #2db34a; color: #fff; display: inline-block; height: 30px; line-height: 30px; padding: 0 12px; position: relative; text-decoration: none; } .arrow:before, .arrow:after { content: ""; height: 0; position: absolute; width: 0; } .arrow:before { border-bottom: 15px solid #2db34a; border-left: 15px solid transparent; border-top: 15px solid #2db34a; left: -15px; } .arrow:after { border-bottom: 15px solid transparent; border-left: 15px solid #2db34a; border-top: 15px solid transparent; right: -15px; } .arrow:hover { background: #ff7b29; } .arrow:hover:before { border-bottom: 15px solid #ff7b29; border-top: 15px solid #ff7b29; } .arrow:hover:after { border-left: 15px solid #ff7b29; }

Поддержка селекторов в браузерах

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

CSS3.info предлагает инструмент CSS3 Selectors Test , который будет информировать вас о том, какие селекторы поддерживаются браузером. Также неплохой идеей будет проверить поддержку браузера непосредственно в нём.

На Smashing Magazine

  • Understanding:nth-child Pseudo-class Expressions на SitePoint
  • Taming Advanced CSS Selectors на Smashing Magazine