Sélecteurs CSS Child vs Descendant


299

Je suis un peu confus entre ces 2 sélecteurs.

Le sélecteur descendant :

div p

sélectionner tout pdans un divsi c'est un descendant immédiat ou non? Donc, si le pest à l'intérieur d'un autre, divil sera toujours sélectionné?

Ensuite, le sélecteur d' enfant :

div > p

Quelle est la différence? Un enfant signifie-t-il un enfant immédiat ? Par exemple.

<div><p>

contre

<div><div><p>

seront tous deux sélectionnés ou non?


J'ai essayé d'expliquer ici en détail, peut se référer juste au cas où cela serait utile à n'importe qui ...
M. Alien

Réponses:


469

Pensez à ce que les mots «enfant» et «descendant» signifient en anglais:

  • Ma fille est à la fois mon enfant et mon descendant
  • Ma petite-fille n'est pas mon enfant, mais elle est ma descendante.

49
Une note importante est qu'un sélecteur enfant va être plus rapide que le sélecteur descendant, ce qui peut avoir un effet visible sur les pages contenant des milliers d'éléments DOM.
Jake Wilson

Bonne réponse, mais j'ajouterais simplement des réponses directes à ses exemples dans la question - juste pour que ce soit ridiculement clair.
JoeCool


23

Bascailly, " ab " sélectionne tous les b à l'intérieur de a, tandis que " a> b " sélectionne les b qui ne sont que des enfants pour le a , il ne sélectionnera pas b ce qui est enfant de b ce qui est enfant de a .

Cet exemple illustre la différence:

div span{background:red}
div>span{background:green}

<div><span>abc</span><span>def<span>ghi</span></span></div>

La couleur d'arrière-plan de abc et def sera verte, mais ghi aura une couleur d'arrière-plan rouge.

IMPORTANT: si vous changez l'ordre des règles en:

div>span{background:green}
div span{background:red}

Toutes les lettres auront un fond rouge, car le sélecteur descendant sélectionne également l'enfant.


La section "Important" que vous avez ajoutée complète cette réponse. Merci!
Aakash Verma

10

En théorie: Enfant => un descendant immédiat d'un ancêtre (par exemple Joe et son père)

Descendant => tout élément qui descend d'un ancêtre particulier (par exemple Joe et son arrière-arrière-grand-père)

En pratique: essayez ce 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>

avec ce CSS:

span { color: red; } 
div.one span { color: blue; } 
div.two > span { color: green; }

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


Intéressant sur quel navigateur vous l'avez testé, car il semble fonctionner effectivement
yoel halb

3
Pour info, CSS en réponse ne correspond pas avec CSS dans JSFiddle ( redet blueéchangé).
Pang

7

Sachez que le sélecteur enfant n'est pas pris en charge dans Internet Explorer 6. (Si vous utilisez le sélecteur dans un sélecteur jQuery / Prototype / YUI etc. plutôt que dans une feuille de style, il fonctionne toujours)


je pense que je l'utilise en CSS. mais dans jquery je détecte si le navigateur est ie6 (dans jquery je peux le faire? ou dois-je utiliser <! - [si IE 6]>) et ajouter une classe
iceangel89

2
jquery propose le reniflement plutôt que le reniflement du navigateur, donc je ne pense pas que vous puissiez détecter si le navigateur est ie6. Et tu ne devrais pas. Le mieux est d'inclure une feuille de style supplémentaire pour ie6 avec des commentaires conditionnels comme vous l'avez décrit.
rlovtang

4
div p 

Sélectionne tous les éléments 'p' dont le parent est un élément 'div'

div> p

Cela signifie que les enfants immédiats sélectionnent tous les éléments «p» dont le parent est un élément «div»


-1

La sélection CSS et l'application de style à un élément particulier peuvent être effectuées en parcourant l'élément dom [Exemple

Exemple

.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>
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.