Пост

Все css селекторы

Кратко и четко список css селекторов

Все css селекторы

Таблица селекторов

В данной таблице кратко перечислю селекторы css с их назначением. В столбце “дополнительно”, будут ссылки на примеры.

СелекторНазначениеОписаниеЧто попадаетДополнительноПоддержкаСпецифичностьСкорость селектора
*Универсальный селекторПопадают все элементы на странице<body><div></div></body>1baseline0,0,0Медленно - Сопоставляется с абсолютно каждым элементом
divСелектор тегаВсе элементы div на странице<div></div><div></div>1baseline0,0,1Быстро - Быстро не не так эффективно как id и классы
#headerСелектор по idЭлемент с указанным id<div id="header"></div>1baseline1,0,0Очень быстро - Обращение идет сразу к элементу
.titleСелектор по классуВсе элементы с указанным классом<span class='title'></span>1baseline0,1,0Очень быстро - Браузеры индексируют классы при парсинге DOM
.red.blueСоставной селекторПрименим для классов и атрибутов, пишется слитно<div class='red blue'></div>1 2baseline0,2,0 
[lang]Элементы с атрибутомВсе элементы где есть атрибут<div lang="ru"></div>1baselne0,1,0Медленно - Атрибутные селекторы требуют полного обхода элементов
[lang="en"]Элементы со значением атрибутаВсе элементы, где у атрибута есть конкретное значение<div lang="en"></div>1baselne0,1,0Медленно - Сравниваются строки
[class*="red"]Значение атрибута как подстрокаВсе элементы, где есть значение атрибута в любом месте<div class="greenredyellow"></div>1baselne0,1,0Очень медленно - Производится анализ подстроки (Строка проверяется полностью)
[class~="red"]Значение атрибута есть в списке значенийВсе элементы, где значение есть в списке разделенным пробелами<div class="red blue black"></div>1baselne0,1,0Средне - Строка разбивается на массив. Поиск по массиву с точным совпадением.
[class^="red-"]Значение атрибута начинается со значенияВсе элементы, где значение атрибута начинается со значения<div class="red-color"></div>1baselne0,1,0Медленно - Производится анализ подстроки (Только в начале или конце).
[class$="red"]Значение атрибута заканчивается со значенияВсе элементы, где значение атрибута заканчивается со значения<div class="color-red"></div>1baselne0,1,0Медленно - Производится анализ подстроки (Только в начале или конце).
[class|=”red”]Значение атрибута либо точно равно либо равно+тиреВсе элементы, где значение атрибута либо точно равно либо равно+тире<div class="red-color"></div>1baselne0,1,0 
[class="red" i]Значение атрибута без учета регистраВсе элементы, где указано значение атрибута без учета регистра<div class="RED"></div>1baselne0,1,0 
p spanСелектор потомковВыбирает элементы ,которые являются потомками указанного элемента<p><span></span></p>1 2baselne0,0,2Медленно - Необходимо проверять большое кол-во узлов без ограничения по вложенности.
p > spanДочерний селекторВыбирает элементы которые прямые или дочерние укаазнного элемента<p><span></span></p>1baselne0,0,2Средне - Сопоставление происходит не по всему документу, а в ограниченной вложенности.
a ~ spanСелектор соседних элементовВыбирает все соседние элементы которые следуют за указанным<a href="">ссылка</a><span></span>1baselne0,0,2 
a + spanСмежный селекторВыбирает элемент который идет текущего, но только один<a href="">ссылка</a><span></span>1baselne0,0,2 
h1, h2, h3Группировка селекторовГрупирует селекторы для одних и тех же правил<h1></h1><h2></h2>1baselne0,0,1 
:linkНепосещенные ссылкиПрименяться для ссылок, которые пользователь не посещал     
:visitedПосещенные ссылки пользователемЕсли по ссылке был переход   0,1,1 
:hoverНаведение на элементПрименятся при наведении курсора на любой элемент   0,1,1 
:activeВ момент нажатия на элементПрименяется к элементам взаимодествие с которыми идет в текущий момент     
:focusЕсли элемент в фокусеПрименяется к элементам в фокусе   0,1,1 
:focus-visibleЕсли перешли на элемент с помощью TABЕсли нужен focus, но только по клавише TAB     
:focus-withinВыделение целого разделаПрименятся к элементам дочерние элементы которого имеют :focus     
:not()Элементы которые не подходят под условиеПрименятся к элементам которые не соответвуют значению переданного в not    Очень медленно - требует дополнительной проверки
:is()Умное перечисление селекторов внутри isПрименяется ко элементам перечисленных внутри селектора     
:where()Применение правил для всех селекторов внути whereПрименяется ко всем селекторам внутри, при этом не добавляя им веса     
:has()Возможность уточнить селекторПрименяеться ко вложенным элементам     
:root()Применятся к корневому элементуЗадание стилей для элемента html, применяют для указания переменных   0,1,0 
:targetУправление ссылками на якорьПримененяется к ссылками на внутренние страницы     
:lang()Стили к элементу с языкомВыбирает элементы с указанным языком     
:defaultГруппа аналогичных элементовВыбирает элементы которые используются по умолчанию в группе аналогичных элементов     
:checkedОтмеченные элементы формыСтилизует выбранны чекбокс,радиокнопку, или элементам option     
:disabledНеактивные элементы формыПрименяется к деактивированным элементам формы     
:enabledАктивные элементы формыПрименятся к включенным элементам формы     
:requiredПоля с атрибутом required      
        
        
        
        
        
        

Примеры к селекторам

universal-1

Применим ко всем элементам на странице

1
2
3
* {
    background-color: #2bcc2b;
}
1
2
3
4
5
6
7
<b>b</b>
<span>span</span>
<div>
  <div>
    <div>div</div>
  </div>
</div>

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

Применяется ко всем элементам к которым возможно применить стиль

tag-1

Применим ко всем тегам div на любом уровне вложенности

1
2
3
div {
  background-color: #2bcc2b;
}
1
2
3
4
5
6
7
8
<b>b</b>
<span>span</span>
<div>
  <div>
    <div>div1</div>
  </div>
</div>
<div>div2</div>

Селектор тега

В данном случае div1 и div2 попадают под селектор

id-1

На странице может быть только один селектор тега

1
2
3
#header {
  background-color: #2bcc2b;
}
1
2
3
4
5
6
7
8
9
<b>b</b>
<span>span</span>
<div>
  <div>
    <div id="header">header</div>
  </div>
</div>
<div>div2</div>
<div>div3</div>

Селектор по id

class-1

Все элементы с указанным классом

1
2
3
.title {
    color: #2bcc2b;
}
1
2
3
4
5
6
7
8
9
<b class="title">b</b>
<span>span</span>
<div>
  <div>
    <div class="title">title</div>
  </div>
</div>
<div>div2</div>
<div class="title">div3</div>

Селектор по классу

В данном случае будут выбраны все элементы у которых есть класс .title.

composite-1

Применяется для всех элементов, где есть два класса в любом порядке

1
2
3
.red.blue {
    background-color: #2bcc2b;
}
1
2
3
4
5
6
7
8
9
10
11
12
<div class="red blue">1</div>
<div class="blue red">2</div>
<div class="blue red yellow">3</div>
<div class="blue">4</div>
<div class="red">5</div>
<div>
  <div>
    <div>
      <span class="red blue">6</span>
    </div>
  </div>
</div>

Составной селектор

В данном случае два класса есть у элемента 1,2,3,6 они и будут выделены

composite-2

div с определенным атрибутом

1
2
3
div[title] {
    color: #2bcc2b;
}
1
2
3
4
5
6
7
8
<div title="1">1</div>
<div title="2">2</div>
<div title="">3</div>
<div>
  <div>
    <span title="2">4</span>
  </div>
</div>

Составной селектор

В данном случае под условие попадут только элементы div с любым атрибутом title

attr-1

1
2
3
[title] {
    color: #2bcc2b;
}
1
2
3
4
5
6
7
8
<div title="1">1</div>
<div title="2">2</div>
<div>3</div>
<div>
  <div>
    <span title="3">4</span>
  </div>
</div>

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

В данном случае попадают 2 первых div и вложенный span.

attr-2

Атрибут с определенным значением

1
2
3
[title="2"] {
  color: #2bcc2b;
}
1
2
3
4
5
6
7
8
<div title="1">1</div>
<div title="2">2</div>
<div title="">3</div>
<div>
  <div>
    <span title="2">4</span>
  </div>
</div>

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

В данном примере только 2 и 4 элементы попадают под условие.

attr-3

Атрибут, где значение находиться в любом месте как подстрока.

1
2
3
[class*="red"] {
  background-color: #8250df;
}
1
2
3
4
5
6
7
8
9
10
11
<div class="red">1</div>
<div class="red blue">2</div>
<div class="red-123">3</div>
<div class="yellow-red">4</div>
<div class="yellow-red-blue">5</div>
<div class="yellow-rd-blue">6</div>
<div>
  <div>
    <span class="REDred">7</span>
  </div>
</div>

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

Все элементы, кроме 6, попадают под условие.

attr-4

Значение атрибута есть в списке разделенном пробелами

1
2
3
[class~="red"] {
  background-color: #8250df;
}
1
2
3
4
5
6
7
8
9
10
11
<div class="red">1</div>
<div class="red blue">2</div>
<div class="blue red yellow">3</div>
<div class="yellow-red">4</div>
<div class="yellow-red-blue">5</div>
<div class="yellow-rd-blue">6</div>
<div>
  <div>
    <span class="REDred">7</span>
  </div>
</div>

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

Только первые три div попадают, так как у них есть атрибут класс с несколькими классами

attr-5

Значение атрибута начинается со значения

1
2
3
[class^="red"] {
    background-color: #8250df;
}
1
2
3
4
5
6
7
8
9
10
11
<div class="redok">1</div>
<div class="medred blue">2</div>
<div class="blue red yellow">3</div>
<div class="yellow-red">4</div>
<div class="yellow-red-blue">5</div>
<div class="yellow-rd-blue">6</div>
<div>
  <div>
    <span class="red-color">7</span>
  </div>
</div>

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

В данном случае попадет элемент 1 и 7

attr-6

Значение атрибута заканчивается значением

1
2
3
[class$="red"] {
   background-color: #8250df;
}
1
2
3
4
5
6
7
8
9
10
11
<div class="redok">1</div>
<div class="medred blue">2</div>
<div class="blue red yellow">3</div>
<div class="yellow-red">4</div>
<div class="yellow-red-blue">5</div>
<div class="yellow-rd-blue">6</div>
<div>
  <div>
    <span class="red-color-Rred">7</span>
  </div>
</div>

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

Тут попадет элемент 4 и 7

attr-7

Значение атрибута либо равно, либо равно+тире

1
2
3
[class|="red"] {
  background-color: #8250df;
}
1
2
3
4
5
6
7
8
9
10
11
<div class="red">1</div>
<div class="med red blue">2</div>
<div class="blue red yellow">3</div>
<div class="yellow-red">4</div>
<div class="yellow-red-blue">5</div>
<div class="yellow-rd-blue">6</div>
<div>
  <div>
    <span class="red-color">7</span>
  </div>
</div>

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

В данном случае попадает 1 и 7 элемент, в первом точное совпадение, а в 7 идет тире после названия

attr-8

1
2
3
[class="red" i] {
    background-color: #8250df;
}
1
2
3
4
5
6
7
8
<div class="red">1</div>
<div class="Red">2</div>
<div class="RED">3</div>
<div>
  <div>
    <span class="black">4</span>
  </div>
</div>

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

Здесь под действие селектора попадают 3 первых элемента div.

descendant-1

Селектор потомков. Выбирает всех потомков элемента на любом уровне вложенности от дочерних элементов и ниже.

1
2
3
div span {
    background-color: #fa0202;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
<div>
  <span>1</span>
</div>
<div>
  <div>
    <section>
      <span>2</span>
    </section>
  </div>
</div>
<section>
  <section>
    <span>3</span>
  </section>
</section>
<section>
  <section>
    <div>
      <section>
        <section>
          <article>
            <span>4</span>
          </article>
        </section>
      </section>
    </div>
  </section>
</section>

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

В данном примере селектор потомков выбирает 1,2,4 так как они являются дочерними элементами

descendant-2

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

1
2
3
.one .two .three .four .five {
    background-color: #0d6efd;
}
1
2
3
4
5
6
7
8
9
10
<div class="one">
  <div class="two">
    <div class="three">
      <div class="four">
        <section>
          <div class="five">1</div>
        </section>
      </div>
    </div>
</div>

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

Элемент с классом five попадает под условие, но такой код уже становится сложно читать.

child-1

Дочерний селектор выбирает только прямые потомки текущего элемента

1
2
3
div > span {
    background-color: #fa0202;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
<div>
  <span>1</span>
</div>
<div>
  <div>
    <section>
      <span>2</span>
    </section>
  </div>
</div>
<section>
  <section>
    <span>3</span>
  </section>
</section>
<section>
  <section>
    <div>
      <section>
        <section>
          <article>
            <span>4</span>
          </article>
        </section>
      </section>
    </div>
  </section>
</section>

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

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

neighboring-1

1
2
3
a ~ span {
    background-color: #fa0202;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<a href="https://ya.ru">ссылка</a>
<span>1</span>
<span>2</span>
<span>3</span>
<section>
  <span>4</span>
  <div>
    <a href="https://ya.ru">ссылка</a>
    <span>5</span>
    <section>
      <a href="https://ya.ru">ссылка</a>
      <span>6</span>
    </section>
  </div>
</section>

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

Тут выбираются соседние элементы которые идут после ссылки a, в данном случае все кроме элемента 4 подходят под условие.

adjacent-1

Смежный селектор выбирает один элемент после текущего

1
2
3
a + span {
    background-color: #fa0202;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<a href="https://ya.ru">ссылка</a>
<span>1</span>
<span>2</span>
<span>3</span>
<section>
  <span>4</span>
  <div>
    <a href="https://ya.ru">ссылка</a>
    <span>5</span>
    <section>
      <a href="https://ya.ru">ссылка</a>
      <span>6</span>
      <span>7</span>
    </section>
  </div>
</section>

Смежный селектор

В данном случае будет выбран один дочерний элемент после ссылки.

group-1

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

1
2
3
4
5
6
h1,
h2,
h6
{
  background-color: #fa0202;
}
1
2
3
4
5
6
7
8
<div id="root">
  <h1>1</h1>
  <h2>2</h2>
  <h3>3</h3>
  <h4>4</h4>
  <h5>5</h5>
  <h6>6</h6>
</div>

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

Скорость селекторов

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

Браузер обрабатывает стили справа - налево, то есть селектор div span, будут найден все span, и только потом будет проверка, что элементы в div

  • Избегайте избыточной вложенности
  • Замените сложные селекторы на классы
  • Опасайтесь тяжёлых конструкций
Авторский пост защищен лицензией CC BY 4.0 .

Оптимизация бизнеса, создание сайтов, разработка парсеров или интеграций.

Бесплатно расчитаю время разработки, предложу решение вашей задачи.