Пекка объяснил это теоретически в своем ответе .На основе его ответа и моего ответа на другой вопрос о >
комбинаторе я приведу иллюстрацию, модифицированную для решения этого вопроса.
Рассмотрим следующий блок HTML,и ваш пример CSS селекторов. Я использую более сложный пример, чтобы показать вам разницу между обоими вашими селекторами:
<div>
<p>The first paragraph.</p> <!-- [1] -->
<blockquote>
<p>A quotation.</p> <!-- [2] -->
</blockquote>
<div>
<p>A paragraph after the quotation.</p> <!-- [3] -->
</div>
</div>
Какие <p>
s выбираются какими селекторами?
Прежде всего, все они соответствуют div p
, потому что они <p>
элементы, расположенные где-нибудь в пределах a <div>
элемента.
Это делает div > p
более конкретным, напрашивается следующий вопрос:
Какие <p>
s выбраны с помощью div > p
?
Выбранный
Этот параграф <p>
является дочерним или прямым потомком самого внешнего <div>
.Это означает, что он не содержится ни в каком другом элементе, кроме <div>
.Иерархия проста, как описывает селектор, и поэтому она выбирается с помощью div > p
.
Не выбрано
This <p>
находится в элементе <blockquote>
, а элемент <blockquote>
находится во внешнем <div>
.Таким образом, иерархия будет выглядеть следующим образом:
div > blockquote > p
Поскольку абзац непосредственно содержится в кавычках, он не , выбранный div > p
.Однако он может соответствовать blockquote > p
(другими словами, он является потомком <blockquote>
).
Выбранный
Этот абзац живет во внутреннем <div>
, который содержится во внешнем <div>
.Иерархия будет выглядеть следующим образом:
div > div > p
Не имеет значения, если в друг друга вложено больше <div>
или даже если <div>
содержатся в других элементах.Пока этот абзац непосредственно содержится в его собственном <div>
, он будет выбран div > p
.