Селектор в 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.
Смотрите также Селекторы на основе нумерации и Селекторы на основе порядка.
