Селекторы CSS Child и Descendant
Я немного запутался между этими двумя селекторами.
Имеет ли потомок селектор:
div p
выбрать все p
в пределах div
или нет, это непосредственный потомок? Так что если p
внутри другого div
он все равно будет выбран?
Тогда дочерний селектор:
div > p
Какая разница? Ребенок означает непосредственный ребенок? Например.
<div><p>
против
<div><div><p>
оба будут выбраны, или нет?
9 ответов
Подумайте, что означают слова "ребенок" и "потомок" на английском:
- Моя дочь - и мой ребенок, и мой потомок
- Моя внучка не мой ребенок, но она мой потомок.
Да вы правы. div p
будет соответствовать следующему примеру, но div > p
не буду.
<div><table><tr><td><p> <!...
Первый называется селектором потомков, а второй - дочерним селектором.
По сути, "ab" выбирает все b внутри a, в то время как "a> b" выбирает b, которые являются только дочерними по отношению к a, он не будет выбирать b, который является дочерним по отношению к b по отношению к дочернему по отношению к a.
Этот пример иллюстрирует разницу:
div span{background:red}
div>span{background:green}
<div><span>abc</span><span>def<span>ghi</span></span></div>
Цвет фона abc и def будет зеленым, но у ghi будет красный цвет фона.
ВАЖНО: Если вы измените порядок правил на:
div>span{background:green}
div span{background:red}
Все буквы будут иметь красный фон, потому что селектор потомков также выбирает дочерний.
Теоретически: ребенок => непосредственный потомок предка (например, Джо и его отец)
Десцендент => любой элемент, который произошел от определенного предка (например, Джо и его пра-пра-прадедушка)
На практике попробуйте этот HTML:
<div class="one">
<span>Span 1.
<span>Span 2.</span>
</span>
</div>
<div class="two">
<span>Span 1.
<span>Span 2.</span>
</span>
</div>
с этим CSS:
span { color: red; }
div.one span { color: blue; }
div.two > span { color: green; }
div p
Выбирает все элементы 'p', где родительский элемент является элементом 'div'
div > p
Это означает непосредственные дочерние элементы. Выбирает все элементы "p", где родительский элемент является элементом "div".
Имейте в виду, что дочерний селектор не поддерживается в Internet Explorer 6. (Если вы используете селектор в селекторе jQuery/Prototype/YUI и т. Д., А не в таблице стилей, он все еще работает)
div > p
совпадения p
у которых есть div
родитель - <div><p>
в вашем вопросе
div p
совпадения p
у которых есть div
предок (родитель, дедушка, прадед и т. д.) - <div><p>
а также <div><div><p>
в вашем вопросе
Выбор CSS и применение стиля к определенному элементу может быть сделано через обход элемента dom [Пример
.a .b .c .d{
background: #bdbdbd;
}
div>div>div>div:last-child{
background: red;
}
<div class='a'>The first paragraph.
<div class='b'>The second paragraph.
<div class='c'>The third paragraph.
<div class='d'>The fourth paragraph.</div>
<div class='e'>The fourth paragraph.</div>
</div>
</div>
</div>