HTML\CSS → Виды CSS селекторов

Селектор в CSS — это указатель на элемент или группу элементов, к которым будут применяется правила стилей. Существуют следующие виды селекторов:

1. Селекторы по тэгам: h1

2. Селектор по id: #main

3. Селекторы по классам: .hidden

4. Селектор по нескольким классам

Записываются слитно без пробелов. Селекторы удовлетворяющие одновременно сразу нескольким условиям (логическое “И”). Стили будут применяться ко всем элементам, которые одновременно имеют и класс .hidden и класс .closed.

.hidden.closed

5. Контекстные селекторы

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

p strong
ul .selected
.header .menu a

Например, селектор .menu a сработает для ссылки a только в том случае, если она расположена внутри элемента с классом .menu.

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

Выделяет последующий элемент. Записываются с помощью знака +. Читается как: применить свойства к селектор2 который должен быть сразу после селектор1.

Стили применяются к элементу, подходящему под селектор2, только если перед ним расположен элемент, подходящий подселектор1.

<li class="green"></li>
<li class="selected"></li>
...
.green + .selected {}

В примере .green + .selected применит стили ко второму элементу, т.к. перед ним есть элемент с классом .green. Селектор.green + li тоже применит стили ко второму элементу, а селектор .selected + .green не сработает.

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

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

<ul><li>item</li></ul>
<p>Selected</p>
<p>Selected</p>
<p>Selected too</p>
<span>Not selected</span>
...
ul ~ p {}

В данном примере будут выбраны все элементы p, идущие за ul. В то время, как при использовании селектора ul + p будет выбран только первый элемент.

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

Записываются с помощью знака > и распространяются только на элементы первого уровня вложенности. На элементы вложенные в другие элементы не распространяются.

ul > li {}

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

ul > li означает то же, что и ul li, но выбираются только li первого уровня вложенности, которые напрямую являются вложенными в ul. На li вложенные в другие дочерные li элементы, правила уже не будут действовать.

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

Чаще всего используются при работе с формами. Селекторы атрибутов записываются с использованием квадратных скобокэлемент[атрибут].

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

input[type="text"]
input[checked]
div[data-type="image"]
a[href*=".com"]
a[href^="http"]
a[href$=".jpg"]
a[data-info~="bar"]

В примере выше ~ позволяет выделить определенный атрибут из списка атрибутов, разделенных запятой, например из:

<a href="#" data-info="foo bar">

10. Глобальный селектор

Селектор * выберет все элементы. Его также можно использовать для выделения дочерних элементов:

* { margin: 0; padding: 0; }
.content * { outline: none; }

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

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

a:link
a:visited
a:active
a:hover
input[type=radio]:checked
.clearfix:after {}
div:not(#container)
p::first-line
p::first-letter

Псевдокласс отрицания :not бывает очень полезным. Например, когда необходимо выбрать все div, за исключением того, который имеет id container.

Смотрите также Селекторы на основе нумерации и Селекторы на основе порядка.