Комбинированные селекторы

Комбинированные селекторы

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

Если вы уже разобрались в том, что такое HTML-селекторы и селекторы классов, стоит изучить продвинутые методы CSS программирования. Эти методы помогут вам лучше ориентироваться в коде и облегчат задачи разработки.

Комбинированные селекторы — это сочетания, уже известных вам селекторов CSS, которые позволяют комбинировать несколько типов селекторов для более точного выбора элементов или их групп, основываясь на их положении в документе или отношениях с другими элементами.

Группировка

Группирование селекторов используется для лаконичного написания кода за счет перечисления элементов с одними и тем же стилевым оформлением.

Пример без группировки

h2 {
  font-size: 16px;
}
p {
  font-size: 16px;
}
.text {
  font-size: 16px;
}

Пример с группировкой

h2, p, .text {
  font-size: 16px;
}

Объединение

Прием объединения селекторов применяется только для классов и атрибутов и повышает специфичность. Стили будут применены ко всем элементам, содержащим все перечисленные селекторы.

Правило записи: .class1.class2

Пример:

.class1.class2 {
  color: tomato;
}
<div class="class1 class2">Этот DIV будет содержать текст помидорного цвета</div>
<div class="class1">Данный DIV будет иметь цвет по умолчанию</div>

Вложенные селекторы

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

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

Селекторы потомков выбирают все потомки указанного элемента, независимо от их глубины вложенности.

Правило записи: element1  element2

Пример:

.parent p {
  color: blue;
}

Здесь будут выбраны все p элементы, которые являются потомками элемента с классом "parent", независимо от того, насколько глубоко они вложены.

<div class="parent">
  <p>Этот параграф будет выбран с помощью селектора потомка.</p>
  <span>Span не будет выбран.</span>
  <div>
    <p>Этот параграф будет выбран с помощью селектора потомка.</p>
  </div>
</div>

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

Дочерние селекторы позволяют выбирать элементы, находящиеся непосредственно внутри других элементов. Используется при этом символ ">".

Правило записи: element1 > element2

Пример:

.parent > p {
  color: red;
}

В этом случае будут выбраны только p элементы, которые являются непосредственными детьми элемента с классом "parent".

<div class="parent">
  <p>Этот параграф будет выбран с помощью дочернего селектора.</p>
  <span>Span не будет выбран.</span>
  <div>
    <p>Данный параграф является потомком, но не будет выбран.</p>
  </div>
</div>

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

(соседние)

Смежные селекторы (или комбинаторы) в CSS позволяют выбирать элементы HTML-страницы, которые стоят рядом друг с другом и имеют общего родителя.  Первый элемент должен быть соседом второго элемента, чтобы смежный селектор сработал.

Правило записи: element1 + element2

Пример:

h1 + p {
  color: red;
}

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

<h1>Абзац красного цвета</p>
<p>Абзац красного цвета</p>
<p>Абзац цвета по умолчанию</p>

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

(сиблинговые, сестринские)

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

Правило записи: element1 ~ element2

Пример:

h2 ~ p {
  font-size: 24px;
}

Cтиль применится тегам p, следующим после тега h2 и стоящим до закрывающего тега родителя div.

<div class="parent1">
  <h1>Стиль по умолчанию</h2>
  <p>Стиль по умолчанию</p>
  <h2>Стиль по умолчанию</h2>
  <p>Стиль применится</p>
  <p>Стиль применится</p>
  <h3>Стиль по умолчанию</h3>
  <p>Стиль применится</p>
</div>

<div class="parent2">
  <p>Стиль по умолчанию</p>
</div>

Обратите внимание, что тег h3 этому никак не помешает. В данном случае стиль не будет применен к тому тегу p, который находится над h2, а также к тегу p, имеющему другого родителя div.

Методология BEM

Методология была разработана Яндексом для быстрого создания сайтов и их легкой поддержки при расширении в дальнейшем. Сейчас такие крупные российские и зарубежные компании, как Google, Epam, Яндекс, Альфа-Банк, BuzzFeeed, используют BEM на своих проектах.

BEM (БЭМ: Блок, Элемент, Модификатор) — это методология именования классов в СSS, создающая компонентный подход в работе над проектом, где интерфейс делится на переиспользуемые блоки.

В методологии BEM не рекомендуется использовать комбинированные селекторы вида .element1.element2, так как они имеют более высокую специфичность и создают сложности в переопределнии. Вместо этого в небольшом количестве можно использовать вложенные селекторы.

Софья Пирогова

Софья Пирогова

Главный редактор / Автор статей