Wählen Sie alle untergeordneten Elemente rekursiv in CSS aus


407

Wie können Sie alle untergeordneten Elemente rekursiv auswählen?

div.dropdown, div.dropdown > * {
    color: red;
}

Diese Klasse wirft nur eine Klasse auf den definierten Klassennamen und alle unmittelbaren untergeordneten Elemente. Wie können Sie auf einfache Weise alle childNodes wie folgt auswählen:

div.dropdown, 
div.dropdown > *, 
div.dropdown > * > *, 
div.dropdown > * > * > *, 
div.dropdown > * > * > * > * {
    color: red;
}

Antworten:


621

Verwenden Sie ein Leerzeichen , um alle Nachkommen eines Elements abzugleichen:

div.dropdown * {
    color: red;
}

x ystimmt mit jedem Element y überein , das sich in x befindet , wie tief es auch verschachtelt sein mag - Kinder, Enkelkinder und so weiter.

Das Sternchen * entspricht einem beliebigen Element.

Offizielle Spezifikation: CSS 2.1: Kapitel 5.5: Nachkommenselektoren


es funktioniert, aber jetzt überschreibt es alle anderen Klassen, auch wenn sie eine höhere Priorität haben .. (sie werden später in der CSS-Datei platziert)
Clarkk

Der Selektor spielt auch eine Rolle bei der Priorität der Eigenschaften, nicht nur dort, wo sie in der Datei angezeigt werden. Sie könnten versuchen, Ihren Werten "! Wichtig" hinzuzufügen, z. B.color: red !important;
anroesti

Ich weiß, es ist ein bisschen hässlich. Sie könnten stattdessen versuchen, präzisere Selektoren zu schreiben. Dies würde wahrscheinlich auch funktionieren. (zB #head ul#head ul#navi)
Anroesti

2
Okay, sehr einfaches Beispiel: p.xyist wichtiger als p, weil es etwas spezifischer ist. jsfiddle.net/ftJVX
anroesti

1
Was ist, wenn ich möchte, dass alle Kinder eine bestimmte Klasse haben?
MEM

144

Die Regel lautet wie folgt:

A B 

B als Nachkomme von A.

A > B 

B als Kind von A.

Damit

div.dropdown *

und nicht

div.dropdown > *
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.