CSS виды селекторов
| Селектор | Описание |
| .block | по классу (можно выбрать множество элементов) |
| #block | по айди (можно выбрать только один элемент) |
| * | выберет все элементы |
| h2 | выберет все элементы [h2] |
| p, span | выберет все элементы [p] и [span] |
| p span | выберет все [span] элементы внутри всех [p] (не важно на какой глубине вложенности) |
| p > span | выберет всех прямых потомков [span] всех элементов [p] |
| p + span | выберет первого нижнего соседа [span] возле всех элементов [p] |
| p ~ span | выбирает все элементы [span], которые идут после элемента [p] |
| [disabled] | выберает все элементы имеющие атрибут [disabled] |
| [type=submit] | выбирает все кнопки, которые имеют тип "submit" |
| [data-type~=vertical] | выбирает все элементы, у которых есть атрибут data-type, и значение его атрибута содержит слово "vertical" |
| [data-text|=start] | выбирает все элементы, у которых есть атрибут data-text, и значение его атрибута начинается с слова "start или start-n" |
[data-text^=start] | выбирает все элементы, у которых есть атрибут data-text, и значение его атрибута начинается с слова "start" |
[ | выбирает все элементы, у которых есть атрибут data-text, и значение его атрибута заканчивается на ".zip" |
[data-text*="TS"] | выбирает все элементы, у которых есть атрибут data-text, и значение его атрибута содержит подстроку "TS" |
| :root | позволяет выбрать корневой элемент документа, который является основой для всего остального содержимого страницы. |
| .block.open | выбирает все элементы на странице класса "block", у которых также есть класс "open" |
Каждый селектор имеет свой уровень производительности, который зависит от его сложности и количества элементов на странице. Однако, некоторые из наиболее медленных селекторов это:
1. Селекторы атрибутов с использованием * (например,
[id*="value"])2. Селекторы псевдоэлементов (::before, ::after, ::first-letter)
3. Селекторы дочерних элементов (например, ul > li)
4. Селекторы, которые полагаются на путь к элементу в документе (например, html body div#content ul.list li a)
5. Селекторы сочетания классов, атрибутов и псевдоклассов (например, .class[attribute]:hover)
6. Селекторы, которые ищут элементы внутри больших документов (например, :not(:last-child) внутри тысячи элементов)
Однако, следует помнить, что производительность может быть различной на разных браузерах и устройствах. Поэтому рекомендуется тестировать производительность вашего CSS на разных платформах и проверять результаты в инструментах разработчика браузера.
.block (по классу)
.block {
background-color: #fff;
border: 1px solid #333;
padding: 10px;
margin-bottom: 20px;
}
<div class="block">
<h2>Заголовок блока</h2>
<p>Текст блока</p>
</div>
Результат:
Заголовок блока
Текст блока
#block (по айди)
#block {
background-color: #fff;
border: 1px solid #333;
padding: 10px;
margin-bottom: 20px;
}
<div id="block">
<h2>Заголовок блока</h2>
<p>Текст блока</p>
</div>
Результат:
Заголовок блока
Текст блока
* (все элементы)
* {
background-color: #fff;
border: 1px solid #333;
padding: 10px;
margin-bottom: 20px;
}
<div>
<h2>Заголовок блока</h2>
<p>Текст блока</p>
</div>
Результат:
Заголовок блока
Текст блока
h2 (по тегу)
h2 {
background-color: #fff;
border: 1px solid #333;
padding: 10px;
margin-bottom: 20px;
}
<div>
<h2>Заголовок блока</h2>
<p>Текст блока</p>
</div>
Результат:
Заголовок блока
Текст блока
p, span (несколько тегов)
p, span {
background-color: #fff;
border: 1px solid #333;
padding: 10px;
margin-bottom: 20px;
}
<div>
<h2>
<span>Заголовок</span>
<span> блока</span>
</h2>
<p>
<span>Текст </span>
<span>блока</span>
</p>
</div>
Результат:
Заголовок блока
Текст блока
p span (выбрать все [span] элементы внутри всех [p])
p span {
background-color: #fff;
border: 1px solid #333;
padding: 10px;
margin-bottom: 20px;
}
<div>
<h2>
<span>Заголовок</span>
<span> блока</span>
</h2>
<p>
<span>Текст </span>
<span>блока 1</span>
<i>
<span>Текст </span>
<span>блока 2</span>
</i>
</p>
</div>
Результат:
Заголовок блока
Текст блока 1 Текст блока 2
p > span (выбрать все [span] только внутри всех [p])
p > span {
background-color: #fff;
border: 1px solid #333;
padding: 10px;
margin-bottom: 20px;
}
<div>
<h2>
<span>Заголовок</span>
<span> блока</span>
</h2>
<p>
<span>Текст </span>
<span>блока 1</span>
<i>
<span>Текст </span>
<span>блока 2</span>
</i>
</p>
</div>
Результат:
Заголовок блока
Текст блока 1 Текст блока 2
p + span (выбрать первого нижнего соседа [span] возле всех элементов [p])
p + span {
background-color: #fff;
border: 1px solid #333;
padding: 10px;
margin-bottom: 20px;
}
<div>
<h2>
<span>Заголовок</span>
<span> блока</span>
</h2>
<p>
<span>Текст </span>
<span>блока 1</span>
</p>
<span>Текст </span>
<span>блока 2</span>
</div>
Результат:
Заголовок блока
Текст блока 1
Текст блока 2p ~ span (выбирает все элементы [span], которые идут после элемента [p])
p ~ span {
background-color: #fff;
border: 1px solid #333;
padding: 10px;
margin-bottom: 20px;
}
<div>
<h2>
<span>Заголовок</span>
<span> блока</span>
</h2>
<p>
<span>Текст </span>
<span>блока 1</span>
</p>
<span>Текст </span>
<span>блока 2</span>
</div>
Результат:
Заголовок блока
Текст блока 1
Текст блока 2[disabled] (выберает все элементы имеющие атрибут [disabled])
[disabled] {
border: 1px solid #FF6A00;
padding: 3px;
}
<div>
<button>Кнопка 1</button>
<button disabled>Кнопка 2</button>
<button>Кнопка 3</button>
</div>
Результат:
[type=submit] (выбирает все кнопки, которые имеют тип "submit")
[type=submit] {
border: 1px solid #FF6A00;
padding: 3px;
}
<div>
<button type="submit">Кнопка 1</button>
<button>Кнопка 2</button>
<button type="submit">Кнопка 3</button>
</div>
Результат:
[data-type~=vertical] (выбирает все элементы, у которых есть атрибут data-type, и значение его атрибута содержит слово "vertical")
[data-type~=vertical] {
border: 1px solid #FF6A00;
padding: 3px;
}
<div data-type="vertical">Этот блок вертикальный</div>
<div data-type="horizontal">Этот блок горизонтальный</div>
<div data-type="horizontal and vertical">Этот блок вертикальный и горизонтальный</div>
Результат:
[data-text|=start] (выбирает все элементы, у которых есть атрибут data-text, и значение его атрибута начинается с слова "start")
[data-text|=start] {
border: 1px solid #FF6A00;
padding: 3px;
}
<p data-text="start-1">Текст 1</p>
<p data-text="start2">Текст 2</p>
<p data-text="stop and start">Текст 3</p>
<p data-text="start">Текст 4</p>
Результат:
Текст 1
Текст 2
Текст 3
Текст 4
[data-text^=start] (выбирает все элементы, у которых есть атрибут data-text, и значение его атрибута начинается с слова "start")
[data-text^=start] {
border: 1px solid #FF6A00;
padding: 3px;
}
<p data-text="start-1">Текст 1</p>
<p data-text="start2">Текст 2</p>
<p data-text="stop and start">Текст 3</p>
<p data-text="start">Текст 4</p>
Результат:
Текст 1
Текст 2
Текст 3
Текст 4
[data-text$=.zip] (выбирает все элементы, у которых есть атрибут data-text, и значение его атрибута заканчивается на ".zip")
[data-text$=".zip"] {
border: 1px solid #FF6A00;
padding: 3px;
}
<p data-text="file.txt">Текст</p>
<p data-text="file.rar">Архив 1</p>
<p data-text="file.zip">Архив 2</p>
<p data-text="zip.file">Текст 2</p>
Результат:
Текст
Архив 1
Архив 2
Текст 2
[data-text*="TS"] (выбирает все элементы, у которых есть атрибут data-text, и значение его атрибута содержит подстроку "TS")
[data-text*="TS"] {
border: 1px solid #FF6A00;
padding: 3px;
}
<p data-text="file.txtTS">Текст 1</p>
<p data-text="file[TS].rar">Текст 2</p>
<p data-text="TS file.zip">Текст 3</p>
<p data-text="TSzip.file">Текст 4</p>
<p data-text="zip.file">Текст 5</p>
Результат:
Текст 1
Текст 2
Текст 3
Текст 4
Текст 5
Повторим про атрибуты.
Выбирает элементы, у которых атрибут data-text:
1.
[data-text="file"]— имеет значение"file"(то есть строго равен указанному значению)2.
[data-text~="file"]— содержит указанное значение в любом месте списка, разделенного пробелами (приметdata-text="file",data-text="file a",data-text="a file", но неdata-text="file.zip", где есть другое слово после значениия"file")3.
[data-text|="file"]— начинается с указанного значения и затем идет дефис (приметdata-text="file",data-text="file-1", но неdata-text="file1", где число идет после слова"file"без дефиса)4.
[data-text^="file"]— начинается с указанного значения, после могут идти любые символы (приметdata-text="file",data-text="file-1",data-text="file1", но неdata-text="Tfile"где символ T идёт перед"file")5.
[data-text$="file"]— заканчивается с указанного значения (приметdata-text="text file",data-text="text-file",data-text="textfile", но неdata-text="file text"где text идёт впереди"file")6.
[data-text*="file"]— содержит указанную подстроку (приметdata-text="textfiletext",data-text="text-file",data-text="text[file]", но неdata-text="text"так как отсутствует искомая подстрока"file")
:root (позволяет выбрать корневой элемент документа, который является основой для всего остального содержимого страницы)
Обычно :root представлен как <html>, однако в некоторых случаях, например при использовании фреймов, может быть другим элементом.
:root {
--main-bg-color: #f8f8f8;
--main-text-color: #333333;
}
body {
background-color: var(--main-bg-color);
color: var(--main-text-color);
}
В этом примере мы устанавливаем пользовательские CSS-переменные через селектор :root. Затем мы используем эти переменные в свойствах CSS для элемента body, которые определяют цвет фона и цвет текста. В результате, переменные могут использоваться повторно для разных элементов на странице, что позволяет легко изменять общие стили для элементов на всей странице с помощью одного объявления.
.block.open (выбирает все элементы на странице класса "block", у которых также есть класс "open")
.open{
border: 1px solid #333;
}
.block.open{
background-color: #fff;
padding: 10px;
}
.block {
background-color: #999;
}
<div class="block open">
<p>Текст 1</p>
<p>Текст 2</p>
</div>
<div class="block">
<p>Текст 3</p>
<p>Текст 4</p>
</div>
Результат:
Текст 1
Текст 2
Текст 3
Текст 4