2009-07-25 12 views
256

Ich bin ein bisschen verwirrt zwischen diesen 2 Selektoren.CSS Kind vs Deszendent Selektoren

Hat das Nachkommen Selektor:

div p 

Alle wählen p innerhalb einer div, ob oder nicht, es ist eine sofortige descedent? Also, wenn die ist in einem anderen div wird es immer noch ausgewählt?

Dann wird das Kind Selektor:

div > p 

Was ist der Unterschied? Bedeutet ein Kind sofort Kind? Z.B.

<div><p> 

vs

<div><div><p> 

werden beide ausgewählt werden, oder nicht?

+0

Ich habe versucht, [hier] zu erklären (http://stackoverflow.com/a/22632849/1542290) im Detail, kann nur für den Fall, wenn seine hilfreich beziehen für alle ... –

Antwort

400

Man denke nur an, was die Worte „Kind“ und „Abkömmling“ bedeutet auf Englisch:

  • Meine Tochter beide mein Kind und mein Nachkomme
  • Meine Enkelin ist nicht mein Kind, aber sie ist meine Nachkomme.
+35

Eine wichtige Anmerkung ist, dass ein Kind-Selektor schneller sein wird als ein Selektor für Nachkommen, der einen sichtbaren Einfluss auf Seiten mit 1000 von DOM-Elementen haben kann. –

+90

Ich hasse es, der Typ zu sein, aber ich bin sicher, du meinst "Effekt". Oh und durch Hass, meine ich natürlich Liebe. – marcusklaas

+11

Es wirkt sich auf die Seite aus, hat aber Auswirkungen auf die Seite. –

42

Ja, Sie haben Recht. div p entspricht dem folgenden Beispiel, aber div > p nicht.

<div><table><tr><td><p> <!... 

Die erste ist descendant selector genannt, und die zweite ist child selector genannt.

8

Seien Sie sich bewusst, dass das Kind Wähler nicht in Internet Explorer unterstützt wird 6. (Wenn Sie den Selektor in einem jQuery/Prototype/YUI etc Wähler eher als in einem Stylesheet verwenden, noch es funktioniert aber)

+0

Ich denke, ich benutze das in CSS.aber in jquery finde ich, ob browser ie6 ist (in jquery kann ich das tun? oder muss ich ) und füge eine klasse hinzu – iceangel89

+2

jquery tun schnüffeln statt browser schnüffeln, also ich don Ich glaube, du kannst erkennen, ob der Browser ie6 ist. Und du solltest nicht. Am besten fügen Sie ein zusätzliches Stylesheet für ie6 mit bedingten Kommentaren hinzu, wie Sie es beschrieben haben. – rlovtang

20

Bascailly "ab" wählt alle bs innerhalb ein, während "a> b" wählt bs was sind nur Kinder zum einem, wird es nicht b wählen, was Kind von b Was ist ein Kind von ein.

Dieses Beispiel verdeutlicht den Unterschied:

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

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

Hintergrundfarbe von abc und def wird grün sein, aber ghi rot Hintergrundfarbe haben.

WICHTIG: Wenn Sie Reihenfolge der Regeln ändern:

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

Alle Briefe werden roten Hintergrund hat, weil Nachkommen Wähler zu Kindern auswählt.

+0

Der Abschnitt "Wichtig", den Sie hinzugefügt haben, macht diese Antwort vollständig. Vielen Dank! –

2
div p

Wählt alle ‚p‘ Elemente, bei denen die Eltern ist ein ‚div‘ -Element

div > p

Es bedeutet sofortige Kinder Wählt alle ‚p‘ Elemente, bei denen die Eltern ist ein ‚div‘ -Element

6

theoretisch: Kind => ein unmittelbarer Nachkomme eines Vorfahren (zB Joe und sein Vater)

Deszendent => jedes Element, das von einem bestimmten Vorfahren abstammt (z. Joe und sein Ur-Ur-Grossvater)

In der Praxis: versuchen, diese 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> 

mit diesem CSS:

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

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

+0

Interessant, auf welchem ​​Browser Sie es getestet haben, da es tatsächlich funktioniert –

+1

FYI, CSS in Antwort stimmt nicht mit CSS in JSFiddle überein ('red' und' blue' vertauscht). – Pang

-1

CSS Auswahl und Das Anwenden eines Stils auf ein bestimmtes Element kann durch das dom-Element erfolgen [Beispiel

Example

.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>