Комбинаторы CSS
Вы уже умеете выбирать элементы селекторами типа, class и id. Следующий навык: стилизовать элемент из‑за его положения относительно другого — внутри раздела, только как прямого потомка или сразу после заголовка.
Что такое комбинаторы CSS?
Комбинатор CSS — это символ (или пробел) между двумя селекторами. Он говорит браузеру, как эти две части должны быть связаны в дереве HTML. Слева — ориентир; справа — то, что реально получает стили.
Четыре комбинатора кратко
Сначала выучите символы, затем потренируйте каждый на коротком примере.
📊 Комбинаторы CSS
| Комбинатор | Символ | Что выбирает | Пример |
|---|---|---|---|
| Потомок | (пробел) | Любое вложенное совпадение внутри предка | article p |
| Дочерний | > |
Только прямой потомок | ul > li |
| Соседний сосед | + |
Следующий сосед сразу после | h2 + p |
| Общий сосед | ~ |
Любой более поздний сосед на том же уровне | h2 ~ p |
Комбинатор потомка (пробел)
Пробел между селекторами значит: «найди второй селектор где угодно внутри первого». Глубина не важна — внуки и более глубокие уровни тоже подходят.
Потомок — абзацы внутри article
cssarticle p {
color: #334155;
line-height: 1.6;
}
Когда полезен потомок
Используйте комбинатор потомка для общего вида внутри области: все абзацы в article, все ссылки в nav. Если нужны только прямые дети, а глубокие совпадения слишком широки, переходите к дочернему комбинатору.
Дочерний комбинатор (>)
> выбирает только прямых детей. Элемент, вложенный глубже одного уровня, не подходит.
Дочерний — только прямые пункты списка
css.menu > li {
list-style: none;
padding: 0.5rem 1rem;
}
Пробел против > на одной картинке
Если HTML такой: <ul class="menu"><li>One<ul><li>Nested</li></ul></li></ul>, то .menu > li стилизует только внешний li. Потомок .menu li стилизует и внешний, и вложенный.
Комбинатор соседнего соседа (+)
+ выбирает элемент, который идёт сразу после соседней ссылки — тот же родитель, соседняя дверь, без элемента между ними.
Соседний сосед — первый абзац после h2
cssh2 + p {
font-size: 1.125rem;
color: #0f766e;
}
Частый приём
Многие макеты хотят, чтобы первый абзац после заголовка выглядел чуть иначе (лид). h2 + p целится в этого соседа, не давая каждому абзацу отдельный class.
Комбинатор общего соседа (~)
~ выбирает каждого более позднего соседа, подходящего под второй селектор — не только ближайшего следующего. Родитель по‑прежнему должен быть общим.
Общий сосед — абзацы после h2
cssh2 ~ p {
max-width: 40rem;
}
+ против ~
h2 + p— только абзац сразу послеh2h2 ~ p— каждый соседнийpпосле этогоh2(первый, второй, третий…)
Если междуh2иpстоитdiv,h2 + pдля этогоpне сработает, аh2 ~ pвсё ещё может выбрать более поздние соседние абзацы.
Какой комбинатор выбрать
- Потомок — «всё такого типа внутри этой области»
- Дочерний — когда вложенность иначе затронет списки или виджеты, которые вы не имели в виду
- Соседний сосед — для одношагового соседа (заголовок → первый абзац)
- Общий сосед — когда несколько сверстников после маркера должны делить один вид
Пока учитесь, держите цепочки короткими. Длинные цепочки сильны — и легко ломаются при смене HTML.
Попробуйте сами
- Соберите короткую страницу с
<article>, внутри —<h2>,<p>,<div>с вложенным<p>, затем ещё один<p>послеdiv. - Добавьте
article p { color: #334155; }и убедитесь, что оба абзаца в статье меняются (потомок). - Смените на
article > p { color: #0f766e; }и обновите — этот цвет должны сохранить только прямые дочерние абзацы; вложенныйpвdiv— нет. - Добавьте
h2 + p { font-weight: bold; }— жирным станет только абзац сразу после заголовка. - По желанию:
h2 ~ p { max-width: 36rem; }— каждый соседний абзац после заголовка получит max-width.
Частые ошибки
- Потомок вместо дочернего — вложенные виджеты получают стили, нужные только верхнему уровню
- Ожидание, что
h2 + pперепрыгнет элемент между заголовком и абзацем — соседний значит сразу - Чтение комбинатора наоборот — стили идут на селектор справа, не на левую ссылку
- Запятая вместо комбинатора (
h2, pгруппирует; это не «p после h2») - Предположение, что
~требует вплотную — общий сосед хочет лишь «более позднего соседа»
Кратко
- Комбинаторы связывают селекторы отношением HTML: внутри, прямой потомок, следующий сосед или более поздние соседи
- Пробел = потомок (любая глубина);
>= только прямой потомок += ближайший следующий сосед;~= любой подходящий более поздний сосед- Стили применяются к селектору справа от комбинатора
- Выбирайте самый узкий комбинатор, который ещё выражает вашу цель
- Практикуйтесь, меняя пробел на
>и сравнивая+с~на одной странице
🧠 Проверьте Свои Знания
Проверьте Свои Знания
Бросьте себе вызов с помощью этой интерактивной викторины и узнайте, насколько хорошо вы понимаете тему
📝 Инструкции
- Внимательно прочитайте каждый вопрос
- Выберите лучший ответ на каждый вопрос
- Вы можете пересдавать тест столько раз, сколько захотите
- Ваш прогресс будет показан вверху