Выберите .d
внутри .c
рядом с .b
внутри .a
Да, все верно.То, как вы поставили свои скобки, также имеет смысл для меня.Вложите их еще для большей ясности:
(((.a) .b) + .c) .d
В этом примере сопоставляется только второй элемент p.d
:
<div class="a">
<div class="b">
<p class="d"></p> <!-- [1] -->
</div>
<div class="c">
<p class="d"></p> <!-- [2] -->
</div>
<div class="c">
<p class="d"></p> <!-- [3] -->
</div>
</div>
Неselected
Этот p.d
элемент не содержится в элементе с классом c
.
Selected
This *Элемент 1030 * содержится в элементе .c
.Элемент .c
следует сразу за элементом .b
, и оба они имеют общий элемент .a
.
Не выбран
This *Элемент 1042 * содержится в элементе .c
.Однако это не сразу следует за элементом .b
;вместо этого он идет после другого .c
элемента, поэтому его p.d
не удовлетворяет селектору.
Если общий смежный комбинатор ~
использовался вместо соседнего братского комбинатора +
, как в
.a .b ~ .c .d
Тогда это p.d
будет сопоставлено.
Что такое оператор +
приоритет в грамматике CSS?
Все составные селекторы и комбинаторы в последовательности обрабатываются справа налево, используя каждую группу селекторов в качестве шага. Этот ответ уточняет.(Это может быть нелогичным, если вы думаете в скобках; чтобы разобраться в этом, просто обращайтесь со скобками, как если бы самые внешние были первыми. Впрочем, любой порядок в порядке, если вы помните, что комбинаторы не ассоциативны.связанный ответ для деталей.)