Filtern Sie eine Gruppe untergeordneter Elemente vorab, bevor Sie die An+B-Logik darauf anwenden.
Die Pseudoklassenselektoren :nth-child() und :nth-last-child()
Mit dem Pseudoklassenselektor :nth-child() lassen sich Elemente im DOM anhand ihres Index auswählen. Mit der An+B-Mikrosyntax können Sie genau festlegen, welche Elemente ausgewählt werden sollen.
:nth-child(2): Wählen Sie das zweite untergeordnete Element aus.:nth-child(2n): Wählen Sie alle geraden untergeordneten Elemente (2., 4., 6., 8. usw.) aus.:nth-child(2n+1): Wählt alle ungeraden untergeordneten Elemente (1., 3., 5., 7. usw.) aus.:nth-child(5n+1): Wählen Sie das 1. (=(5×0)+1), 6. (=(5×1)+1), 11. (=(5×2)+1), … untergeordnete Element aus.:nth-child(5n+2): Wähle das 2. (=(5×0)+2), 7. (=(5×1)+2), 12. (=(5×2)+2), … untergeordnete Element aus.
Wenn Sie den Parameter A weglassen, haben Sie jedoch mehr Auswahlmöglichkeiten. Beispiel:
:nth-child(n+3): Wählt alle untergeordneten Elemente ab dem dritten aus (3., 4., 5. usw.).:nth-child(-n+5): Wählt alle untergeordneten Elemente bis zum fünften aus (1., 2., 3., 4., 5.).
Wenn Sie einige dieser :nth-child()-Auswahlen kombinieren, können Sie Bereiche von Elementen auswählen:
:nth-child(n+3):nth-child(-n+5): Wählt alle untergeordneten Elemente vom dritten bis zum fünften aus (3., 4., 5.).
Mit :nth-last-child() können Sie ähnliche Auswahlen treffen. Die Zählung beginnt jedoch nicht am Anfang, sondern am Ende.
Auswahlen mit der of S-Syntax vorfiltern
Neu in CSS-Selektoren Level 4 ist die Möglichkeit, optional eine Selektorliste an :nth-child() und :nth-last-child() zu übergeben.
:nth-child(An+B [of S]?)
:nth-last-child(An+B [of S]?)
Wenn of S angegeben ist, wird die An+B-Logik nur auf Elemente angewendet, die der angegebenen Selektorliste S entsprechen. Das bedeutet, dass Sie Kinder im Grunde vorfiltern können, bevor An+B seine Arbeit erledigt.
Browser Support
Beispiele
Mit :nth-child(2 of .highlight) wird beispielsweise das zweite übereinstimmende Element mit der Klasse .highlight ausgewählt. Anders ausgedrückt: Wählen Sie aus allen untergeordneten Elementen mit der Klasse .highlight das zweite aus.
Im Gegensatz dazu wird mit .highlight:nth-child(2) das Element ausgewählt, das die Klasse .highlight hat und das zweite untergeordnete Element ist.
Im folgenden Demo sehen Sie diesen Unterschied:
- Das Element, das
:nth-child(2 of .highlight)entspricht, hat einen rosa Rahmen. - Das Element, das
.highlight:nth-child(2)entspricht, hat einen grünen Umriss.
S ist eine Selektorliste, d. h., es können mehrere durch Kommas getrennte Selektoren angegeben werden. Mit :nth-child(4 of .highlight, .sale) wird beispielsweise das vierte Element aus einer Gruppe von gleichgeordneten Elementen ausgewählt, das entweder .highlight oder .sale ist.
Im folgenden Demo-Video hat das Element, das mit :nth-child(4 of .highlight, .sale) übereinstimmt, einen orangefarbenen Rahmen.
Zebra-Streifen – noch einmal
Ein klassisches Beispiel für die Verwendung von :nth-child() ist das Erstellen einer zebragestreiften Tabelle. Bei dieser visuellen Technik werden die Farben der einzelnen Tabellenzeilen abwechselnd dargestellt. Normalerweise würde man so vorgehen:
tr:nth-child(even) {
background-color: lightgrey;
}
Bei statischen Tabellen funktioniert das gut, aber bei dynamischem Filtern der Tabelleninhalte wird es problematisch. Wenn beispielsweise Zeile 2 ausgeblendet wird, sind die Zeilen 1 und 3 sichtbar, jeweils mit derselben Hintergrundfarbe.
Um das Problem zu beheben, können wir :nth-child(An+B [of S]?) verwenden und die ausgeblendeten Zeilen aus der An+B-Logik ausschließen:
tr:nth-child(even of :not([hidden])) {
background-color: lightgrey;
}
Das ist doch praktisch, oder?
Foto von Markus Spiske auf Unsplash