Топ-100Cелекторы в CSS - CodOrbits
LogoCodOrbits

Раздел: HTML

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

Все разделы
Иконка HTML

Cелекторы в CSS

Last updated: 9 мая 2025 г.

До этого мы использовали только селектор конкретного тега ( например h1 {…} ) и селектор класса ( например some-class-name {…} ).

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

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

1/*На странице у нас будет два div блока.
2Создадим и применим к ним два разных класса
3чтобы продемонстрировать работу
4и пользу селекторов*/
5
6.divblock1 {
7    width:410px;
8    height:360px;
9    background:#f1f1f1;
10    float:left;
11    margin: 0 15px 15px 0;
12    text-align: center;
13    padding: 5px 15px 15px 5px;
14    box-shadow: 5px 10px #888888;
15}
16
17.divblock2 {
18    width:410px;
19    height:360px;
20    background:#f1f1f1;
21    float:left;
22    margin: 0 15px 15px 0;
23    text-align: center;
24    padding: 5px 15px 15px 5px;
25    box-shadow: 5px 10px #888888;
26}
27
28/* Ниже конекстный селектор. Здесь два html
29тега или класса (или и то и другое как в данном
30случае) пишутся через пробел.
31Здесь второй html тег это дочерний элемент
32первого. То есть если где-то на странице есть
33например div блоки к которым применен
34класс .divblock1 и в которых есть li теги то ко
35всем li тегам в этих div применяются свойства.
36Здесь у всех li в div с классом divblock1
37меняется цвет текста с помощью color. */
38
39.divblock1 li {
40    color:blue;
41}
42
43/*ниже из прошлых уроков*/
44.header {
45    padding: 10px;
46    background:#aaf6a1;
47}
48.nav {
49    margin: 10px;
50    padding: 10px;
51    background:#f1f1a1;
52}
53.mainSection {
54    float: left;
55    width: 75%;
56    height:600px;
57    background:#b99999;
58}
59.aside {
60    float: left;
61    width: 25%;
62    height:600px;
63    background:#c1fee1;
64}
65.footer {
66    clear: both;
67    background:#d11777;
68}
69
70
71.header {
72    padding: 10px;
73    background:#aaf6a1;
74}
75.nav {
76    margin: 10px;
77    padding: 10px;
78    background:#f1f1a1;
79}
80.section {
81    float: left;
82    width: 75%;
83    height:600px;
84    background:#b99999;
85}
86.aside {
87    float: left;
88    width: 25%;
89    height:600px;
90    background:#c1fee1;
91}
92.footer {
93    clear: both;
94    background:#d11777;
95}
96
97
98.divblock {
99    width:410px;
100    height:300px;
101    background:#f1f1f1;
102    float:left;
103    margin: 0 15px 15px 0;
104    text-align: center;
105    padding: 5px 15px 15px 5px;
106    box-shadow: 5px 10px #888888;
107}
108.imagePropsClass {
109    width: 400px;
110    height: 170px;
111}
112h1, h2 {
113    font-weight: 600;
114    font-family:’Brush Script MT’,cursive;
115}
116h3 {
117    font-weight: 600;
118    font-family: ‘Courier New’, monospace;
119}
120img {
121    border-style: dashed;
122    border-color: red;
123    border-radius: 15px;
124}

Вот и сама страница с div-ами к которым будут применены классы divblock1 и divblock2. К списку в блоке класса divblock1 будет применен контекстный селектор.

1<!DOCTYPE HTML>
2<html>
3<head>
4    <title>Page tab text</title>
5    <link rel="stylesheet" href="C:\HTML\style.css">
6</head>
7<body>
8    <!-- 
9        Добавим два div блока, применим к ним разные классы 
10        и добавим списки в блоки. На списках будем демонстрировать 
11        некоторые селекторы. 
12    -->
13    <div class="divblock1">
14        <img decoding="async" class="imagePropsClass" src="C:\HTML\PatrickLearnsHtml.png">
15        <h3>Патрик учит div и CSS</h3>
16        <ul> <!-- ul это тег списка -->
17            <li> List Item 1</li> <!-- li пункты списка -->
18            <li> List Item 2</li>
19            <li> List Item 3</li>
20        </ul>
21        <p>
22            Какой-то текст в теге p. Какой-то текст в теге p. 
23            Какой-то текст в теге p. Какой-то текст в теге p. 
24            Какой-то текст в теге p. Какой-то текст в теге p. 
25            Какой-то текст в теге p.
26        </p>
27    </div>
28    <div class="divblock2">
29        <img decoding="async" class="imagePropsClass" src="C:\HTML\PatrickLearnsHtml.png">
30        <h3>Патрик учит div и CSS</h3>
31        <ul>
32            <li> List Item </li>
33            <li> List Item </li>
34            <li> List Item </li>
35        </ul>
36        <p>
37            Какой-то текст в теге p. Какой-то текст в теге p. 
38            Какой-то текст в теге p. Какой-то текст в теге p. 
39            Какой-то текст в теге p. Какой-то текст в теге p. 
40            Какой-то текст в теге p.
41        </p>
42    </div>
43</body>
44</html>

Если открыть страницу, то можно увидеть, что все li в div с классом divblock1 окрасились в синий.

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

Search Icon

Если бы мы не знали о контекстном селекторе, то не очень понятно как бы можно было бы применить какие-то свойства к li только в блоке класса divblock1, то есть, чтобы, например, элементов li в блоке класса divblock2 это не касалось.

Разве что создать отдельный класс для этих li и ко всем ним применить эти свойства через него, что ясное дело очень плохое решение по сравнению с этим.

Также обратите внимание, что li не прямой потомок div, a li прямой потомок ul.

То есть контекстный селектор работает для любых потомков прямых или не прямых.

Это пожалуй самый часто используемый селектор помимо двух ранее рассмотренных простейших селекторов.


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

В отличие от предыдущего контекстного селектора селектор ">" выбирает только прямых потомков html элемента.

Контекстный селектор выбирал вообще все li, которые есть в блоке div класса divblock1 и применял к ним синий цвет. Этот же селектор применяет свойства только к ПРЯМОМУ потомку html элемента.

1/*На странице у нас будет два div блока.
2создадим и применим к ним два разных класса 
3чтобы продемонстрировать работу
4и пользу селекторов*/
5
6.divblock1 {
7    width:410px;
8    height:430px;
9    background:#f1f1f1;
10    float:left;
11    margin: 0 15px 15px 0;
12    text-align: center;
13    padding: 5px 15px 15px 5px;
14    box-shadow: 5px 10px #888888;
15}
16
17.divblock2 {
18    width:410px;
19    height:430px;
20    background:#f1f1f1;
21    float:left;
22    margin: 0 15px 15px 0;
23    text-align: center;
24    padding: 5px 15px 15px 5px;
25    box-shadow: 5px 10px #888888;
26}
27
28/* Очевидно что li в любом случае не может быть прямым потомком div блока, поскольку
29li очевидно всегда является прямым потомком только тега ul.
30Поэтому не получится окрасить
31в синий цвет li сделав например так
32
33.divblock1 > li {
34    color:blue;
35}
36
37поскольку li не прямой потомок .divblock1.
38Вместо этого нужно указывать цепочку прямых 
39потомков чтобы добраться к li вот так:
40*/
41
42.divblock1 > ul > li {
43    color:blue;
44}
45
46/*Селектор выше применяет синий цвет ко всем li,
47которые являются прямыми потомками ul, при этом ul должен
48являться прямым потомком .divblock1.*/
49
50/*ниже из прошлых уроков*/
51.header {
52    padding: 10px;
53    background:#aaf6a1;
54}
55.nav {
56    margin: 10px;
57    padding: 10px;
58    background:#f1f1a1;
59}
60.mainSection {
61    float: left;
62    width: 75%;
63    height:600px;
64    background:#b99999;
65}
66.aside {
67    float: left;
68    width: 25%;
69    height:600px;
70    background:#c1fee1;
71}
72.footer {
73    clear: both;
74    background:#d11777;
75}
76
77
78.header {
79    padding: 10px;
80    background:#aaf6a1;
81}
82.nav {
83    margin: 10px;
84    padding: 10px;
85    background:#f1f1a1;
86}
87.section {
88    float: left;
89    width: 75%;
90    height:600px;
91    background:#b99999;
92}
93.aside {
94    float: left;
95    width: 25%;
96    height:600px;
97    background:#c1fee1;
98}
99.footer {
100    clear: both;
101    background:#d11777;
102}
103
104
105.divblock {
106    width:410px;
107    height:300px;
108    background:#f1f1f1;
109    float:left;
110    margin: 0 15px 15px 0;
111    text-align: center;
112    padding: 5px 15px 15px 5px;
113    box-shadow: 5px 10px #888888;
114}
115.imagePropsClass {
116    width: 400px;
117    height: 170px;
118}
119h1, h2 {
120    font-weight: 600;
121    font-family:’Brush Script MT’,cursive;
122}
123h3 {
124    font-weight: 600;
125    font-family: ‘Courier New’, monospace;
126}
127img {
128    border-style: dashed;
129    border-color: red;
130    border-radius: 15px;
131}

Добавим еще один ul обернутый в чистый div блок в div блок класса divblock1.

1<!DOCTYPE HTML>
2<html>
3<head>
4    <title>Page tab text</title>
5    <link rel="stylesheet" href="C:\HTML\style.css" />
6</head>
7<body>
8    <div class="divblock1">
9        <img decoding="async" class="imagePropsClass" src="C:\HTML\PatrickLearnsHtml.png">
10        <h3>Патрик учит div и CSS</h3>
11        <ul>
12            <li> List Item </li>
13            <li> List Item </li>
14            <li> List Item </li>
15        </ul>
16        <!-- Как видим, мы здесь добавили еще один список 
17         в блоке div для демонстрации пользы селектора -->
18        <div>
19            <ul>
20                <li> List Item </li>
21                <li> List Item </li>
22                <li> List Item </li>
23            </ul>
24        </div>
25        <p>Какой-то текст в теге p. Какой-то текст в теге p. 
26        Какой-то текст в теге p. Какой-то текст в теге p. 
27        Какой-то текст в теге p. Какой-то текст в теге p.</p>
28    </div>
29    <div class="divblock2">
30        <img decoding="async" class="imagePropsClass" src="C:\HTML\PatrickLearnsHtml.png">
31        <h3>Патрик учит div и CSS</h3>
32        <ul>
33            <li> List Item </li>
34            <li> List Item </li>
35            <li> List Item </li>
36        </ul>
37        <div>
38            <ul>
39                <li> List Item </li>
40                <li> List Item </li>
41                <li> List Item </li>
42            </ul>
43        </div>
44        <p>Какой-то текст в теге p. Какой-то текст в теге p. 
45        Какой-то текст в теге p. Какой-то текст в теге p. 
46        Какой-то текст в теге p. Какой-то текст в теге p.</p>
47    </div>
48</body>
49</html>

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

В отличие от предыдущего контекстного селектора этот исключает часть элементов внутри divblock1, к которым применяются свойства.

То есть синий цвет применился ко всем li, которые являются конечным элементом цепочки .divblock1 > ul > li, но он не был применен к li, которые являются конечным элементом .divblock1 > div > ul > li, поскольку такой цепочки в css файле мы не определяли.


Псевдокласс отрицания

С помощью псевдокласса отрицания not можно отключить применение свойств селектора к конкретным html элементам.

1/*На странице у нас будет два div блока.
2Создадим и применим к ним два разных класса,
3чтобы продемонстрировать работу
4и пользу селекторов*/
5
6.divblock1{
7    width:490px;
8    height:925px;
9    background:#f1f1f1;
10    float:left;
11    margin: 0 15px 15px 0;
12    text-align: center;
13    padding: 5px 15px 15px 5px;
14    box-shadow: 5px 10px 5px #888888;
15}
16
17.divblock2{
18    width:490px;
19    height:930px;
20    background:#f1f1f1;
21    float:left;
22    margin: 0 15px 15px 0;
23    text-align: center;
24    padding: 5px 15px 15px 5px;
25    box-shadow: 5px 10px 5px #888888;
26}
27
28/*В данном случае с помощью not можно
29сделать так чтобы свойства применялись
30ко всем дочерним img блока div
31с классом divblock1 КРОМЕ тех img которые
32с классом imagePropsClass.*/
33.divblock1 img:not(.imagePropsClass){
34    border: 1.5px solid #d7d7d7;
35}
36
37/*ниже из прошлых уроков*/
38.header {
39    padding: 10px;
40    background:#aaf6a1;
41}
42.nav {
43    margin: 10px;
44    padding: 10px;
45    background:#f1f1a1;
46}
47.mainSection {
48    float: left;
49    width: 75%;
50    height:600px;
51    background:#b99999;
52}
53.aside {
54    float: left;
55    width: 25%;
56    height:600px;
57    background:#c1fee1;
58}
59.footer {
60    clear: both;
61    background:#d11777;
62}
63
64
65.header {
66    padding: 10px;
67    background:#aaf6a1;
68}
69.nav {
70    margin: 10px;
71    padding: 10px;
72    background:#f1f1a1;
73}
74.section {
75    float: left;
76    width: 75%;
77    height:600px;
78    background:#b99999;
79}
80.aside {
81    float: left;
82    width: 25%;
83    height:600px;
84    background:#c1fee1;
85}
86.footer {
87    clear: both;
88    background:#d11777;
89}
90
91
92.divblock {
93    width:410px;
94    height:300px;
95    background:#f1f1f1;
96    float:left;
97    margin: 0 15px 15px 0;
98    text-align: center;
99    padding: 5px 15px 15px 5px;
100    box-shadow: 5px 10px #888888;
101}
102.imagePropsClass {
103    width: 400px;
104    height: 170px;
105}
106h1, h2 {
107    font-weight: 600;
108    font-family:’Brush Script MT’,cursive;
109}
110h3 {
111    font-weight: 600;
112    font-family: ‘Courier New’, monospace;
113}
114img {
115    border-style: dashed;
116    border-color: red;
117    border-radius: 15px;
118}

Добавим пару картинок в div-ы. Как видим никаких классов к этим картинкам не применено.

1<!DOCTYPE HTML>
2<html>
3<head>
4    <title>Page tab text</title>
5    <link rel="stylesheet" href="C:\HTML\style.css" />
6</head>
7<body>
8    <!-- Добавим еще пару картинок в div-ы. -->
9    <div class="divblock1">
10        <img decoding="async" class="imagePropsClass" src="C:\HTML\PatrickLearnsHtml.png"/>
11        <img decoding="async" src="C:\HTML\PatrickLearnsHtml.png"/>
12        <img decoding="async" src="C:\HTML\PatrickLearnsHtml.png"/>
13        <h3>Патрик учит div и CSS</h3>
14        <ul>
15            <li> List Item </li>
16            <li> List Item </li>
17            <li> List Item </li>
18            <li> List Item </li>
19        </ul>
20        <ul>
21            <li> List Item </li>
22            <li> List Item </li>
23            <li> List Item </li>
24            <li> List Item </li>
25        </ul>
26        <p>Какой-то текст в теге p.Какой-то текст в теге p.Какой-то текст в теге p.
27        Какой-то текст в теге p.Какой-то текст в теге p.Какой-то текст в теге p.
28        Какой-то текст в теге p.Какой-то текст в теге p.</p>
29    </div>
30    <div class="divblock2">
31        <img decoding="async" class="imagePropsClass" src="C:\HTML\PatrickLearnsHtml.png"/>
32        <img decoding="async" src="C:\HTML\PatrickLearnsHtml.png"/>
33        <img decoding="async" src="C:\HTML\PatrickLearnsHtml.png"/>
34        <h3>Патрик учит div и CSS</h3>
35        <ul>
36            <li> List Item </li>
37            <li> List Item </li>
38            <li> List Item </li>
39            <li> List Item </li>
40        </ul>
41        <ul>
42            <li> List Item </li>
43            <li> List Item </li>
44            <li> List Item </li>
45            <li> List Item </li>
46        </ul>
47        <p>Какой-то текст в теге p.Какой-то текст в теге p.Какой-то текст в теге p.
48        Какой-то текст в теге p.Какой-то текст в теге p.Какой-то текст в теге p.
49        Какой-то текст в теге p.Какой-то текст в теге p.</p>
50    </div>
51</body>
52</html>

Если откроем страницу, то можем увидеть, что свойства селектора (рамка фиолетового цвета) были применены ко всем картинкам div блока с классом divblock1 кроме картинки с классом imagePropsClass

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

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


Следующие уроки

Тестирование в Java с помощью JUnit

17
мин.

Similar Articles Icon
Divider

Аннотации в JUnit тестах

18
мин.

Similar Articles Icon
Divider

Тестирование с Mockito

20
мин.

Similar Articles Icon