Селектори CSS Child vs Descendant


298

Я трохи заплутався між цими двома селекторами.

Є чи нащадок селектор:

div p

вибрати все pв межах, divчи це негайний спад? Тож якщо pвсередині іншого divце все одно буде обрано?

Тоді дочірній селектор:

div > p

Яка різниця? Чи означає дитину негайну дитину? Напр.

<div><p>

проти

<div><div><p>

обидва будуть обрані, чи ні?


Я намагався пояснити тут детально, можу посилатись лише на випадок, якщо це комусь корисно ...
Містер Чужор

Відповіді:


468

Подумайте, що означають слова "дитина" та "нащадок" англійською мовою:

  • Моя донька є і моєю дитиною, і моїм нащадком
  • Моя внучка не моя дитина, але вона - мій нащадок.

49
Одне важливе зауваження - це те, що дочірній селектор буде швидше, ніж набір нащадків, що може мати видимий вплив на сторінках з 1000 елементами DOM.
Джейк Вілсон

Хороша відповідь, але я просто додав би прямі відповіді до його прикладів у питанні - просто для того, щоб це було смішно зрозумілим.
JoeCool


23

Баскейлі, " 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}

Усі літери матимуть червоний фон, тому що селекціонер вибирає і дитину.


Розділ "Важливо", який ви додали, робить цю відповідь повною. Дякую!
Аакаш Верма

10

Теоретично: дитина => безпосередній нащадок предка (наприклад, Джо та його батько)

Нащадок => будь-який елемент, що походить від конкретного предка (наприклад, Джо та його правнук)

На практиці: спробуйте цей 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; }

http://jsfiddle.net/X343c/1/


Цікаво, у якому браузері ви його протестували, оскільки він, здається, справді працює
yoel halb

3
FYI, CSS у відповідь не збігається з CSS у JSFiddle ( redта заміняється blue).
Панг

7

Майте на увазі, що дочірній селектор не підтримується в Internet Explorer 6. (Якщо ви використовуєте селектор у селекторі jQuery / Prototype / YUI тощо, а не в таблиці стилів, він все ще працює)


Я думаю, я використовую це в CSS. але в jquery я виявляю, чи є браузер ie6 (у jquery чи можу я це зробити? чи потрібно мені використовувати <! - [якщо IE 6]>) та додаю клас
iceangel89

2
jquery роблять функцію нюхання, а не нюхання браузера, тому я не думаю, що ви можете виявити, чи є браузер ie6. І ти не повинен. Найкраще - включити додатковий аркуш стилів для ie6 із умовними коментарями, як ви описали.
rlovtang

4
div p 

Вибирає всі елементи 'p', де батьків є елементом 'div'

div> p

Це означає, що діти безпосередньо вибирають усі елементи 'p', де батьків є елементом 'div'


-1

Вибір 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>
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.