DigitalOcean bietet Cloud-Produkte für jede Phase Ihrer Reise. Starten Sie mit 200 $ kostenlosem Guthaben!
Der Selektor :nth-child erlaubt es Ihnen, ein oder mehrere Elemente basierend auf ihrer Quellreihenfolge nach einer Formel auszuwählen.
/* Select the first list item */
li:nth-child(1) { }
/* Select the 5th list item */
li:nth-child(5) { }
/* Select every other list item starting with first */
li:nth-child(odd) { }
/* Select every 3rd list item starting with first */
li:nth-child(3n - 2) { }
/* Select every 3rd list item starting with 2nd */
li:nth-child(3n - 1) { }
/* Select every 3rd child item, as long as it has class "el" */
.el:nth-child(3n) { }
Er ist in der CSS Selectors Level 3 Spezifikation als „strukturelle Pseudoklasse“ definiert, was bedeutet, dass er zur Gestaltung von Inhalten basierend auf seiner Beziehung zu übergeordneten und Geschwisterelementen verwendet wird.
Nehmen wir an, wir erstellen ein CSS-Grid und möchten den Rand auf jedem vierten Grid-Modul entfernen. Hier ist das entsprechende HTML
<section class="grid">
<article class="module">One</article>
<article class="module">Two</article>
<article class="module">Three</article>
<article class="module">Four</article>
<article class="module">Five</article>
</section>
Anstatt jeder vierten Elemente eine Klasse hinzuzufügen (z. B. .last), können wir :nth-child verwenden
.module:nth-child(4n) {
margin-right: 0;
}
Der Selektor :nth-child nimmt ein Argument entgegen: dies kann eine einzelne Ganzzahl, die Schlüsselwörter even, odd oder eine Formel sein. Wenn eine Ganzzahl angegeben wird, wird nur ein Element ausgewählt – aber die Schlüsselwörter oder eine Formel durchlaufen alle Kinder des übergeordneten Elements und wählen übereinstimmende Elemente aus – ähnlich wie beim Navigieren von Elementen in einem JavaScript-Array. Die Schlüsselwörter „even“ und „odd“ sind selbsterklärend (2, 4, 6, usw. bzw. 1, 3, 5). Die Formel wird mit der Syntax an+b konstruiert, wobei
- „a“ ein ganzzahliger Wert ist
- „n“ der buchstäbliche Buchstabe „n“ ist
- „+“ ein Operator ist und entweder „+“ oder „-“ sein kann
- „b“ eine ganze Zahl ist und erforderlich ist, wenn ein Operator in der Formel enthalten ist
Es ist wichtig zu beachten, dass diese Formel eine Gleichung ist und jedes Geschwisterelement durchläuft, um zu bestimmen, welches ausgewählt wird. Der Teil „n“ der Formel, falls enthalten, repräsentiert eine Menge von zunehmenden positiven ganzen Zahlen (ähnlich wie beim Durchlaufen eines Arrays). In unserem obigen Beispiel haben wir jedes vierte Element mit der Formel 4n ausgewählt, was funktionierte, weil jedes Mal, wenn ein Element überprüft wurde, „n“ um eins erhöht wurde (4×0, 4×1, 4×2, 4×3, usw.). Wenn die Reihenfolge eines Elements mit dem Ergebnis der Gleichung übereinstimmt, wird es ausgewählt (4, 8, 12, usw.). Eine ausführlichere Erklärung der beteiligten Mathematik finden Sie in diesem Artikel.
Zur weiteren Veranschaulichung sind hier einige Beispiele für gültige :nth-child-Selektoren
Glücklicherweise müssen Sie nicht immer die Mathematik selbst machen – es gibt mehrere :nth-child-Tester und Generatoren
:nth-child(an + b von <selektor>)
Es gibt einen wenig bekannten Filter, der zu :nth-child hinzugefügt werden kann, gemäß der CSS Selectors Spezifikation: Die Fähigkeit, das :nth-child einer Teilmenge von Elementen auszuwählen, unter Verwendung des of-Formats. Angenommen, Sie haben eine Liste mit gemischtem Inhalt: Einige haben die Klasse .video, einige haben die Klasse .picture, und Sie möchten die ersten 3 Bilder auswählen. Dies könnten Sie mit dem „of“-Filter wie folgt tun
:nth-child(-n+3 of .picture) {
/*
Selects the first 3 elements
applied not to ALL children but
only to those matching .picture
*/
}
Beachten Sie, dass dies sich von der direkten Anhängung eines Selektors an den :nth-child-Selektor unterscheidet
.picture:nth-child(-n+3) {
/*
Not the same!
This applies to elements matching .picture
which _also_ match :nth-child(-n+3)
*/
}
Das kann etwas verwirrend sein, daher könnte ein Beispiel helfen, den Unterschied zu verdeutlichen
Die Browserunterstützung für den „of“-Filter ist sehr begrenzt: Zum Zeitpunkt des Schreibens unterstützte nur Safari die Syntax. Um den Status Ihres bevorzugten Browsers zu überprüfen, finden Sie hier offene Probleme im Zusammenhang mit :nth-child(an+b of s)
Interessante Punkte
:nth-childdurchläuft Elemente beginnend von oben in der Quellreihenfolge. Der einzige Unterschied zwischen ihm und:nth-last-childbesteht darin, dass letzteres Elemente durchläuft, beginnend von unten in der Quellreihenfolge.- Die Syntax zum Auswählen der ersten
nElemente ist etwas unintuitiv. Sie beginnen mit-n, plus der positiven Anzahl der Elemente, die Sie auswählen möchten. Zum Beispiel wähltli:nth-child(-n+3)die ersten 3li-Elemente aus. - Der Selektor
:nth-childist dem:nth-of-typesehr ähnlich, jedoch mit einem entscheidenden Unterschied: er ist weniger spezifisch. In unserem obigen Beispiel würden sie das gleiche Ergebnis liefern, da wir nur.module-Elemente durchlaufen, aber wenn wir eine komplexere Gruppe von Geschwistern durchlaufen würden, würde:nth-childversuchen, alle Geschwister abzugleichen, nicht nur Geschwister desselben Elementtyps. Dies offenbart die Stärke von:nth-child– es kann jedes Geschwisterelement in einer Anordnung auswählen, nicht nur Elemente, die vor dem Doppelpunkt angegeben sind.
Verwandte Eigenschaften
Weitere Ressourcen
Browser-Unterstützung
| Chrome | Safari | Firefox | Opera | IE | Android | iOS |
|---|---|---|---|---|---|---|
| Alle | 3.2+ | Alle | 9.5+ | 9+ | Alle | Alle |
:nth-child wurde im CSS Selectors Module 3 eingeführt, was bedeutet, dass alte Browserversionen ihn nicht unterstützen. Die moderne Browserunterstützung ist jedoch tadellos, und die neuen Pseudoselektoren werden in Produktionsumgebungen weit verbreitet eingesetzt. Wenn Sie ältere Browserunterstützung benötigen, können Sie entweder ein Polyfill für IE verwenden oder diese Selektoren auf nicht-kritische Weise à la progressive enhancement nutzen, was empfohlen wird.
Ich habe ein Akkordeon-Setup für meinen FAQ-Bereich. Innerhalb eines der „Akkordeons“ habe ich ein Formular mit einer
ul. Dieulhat 5li-Elemente.Ich möchte, dass ein Submit-Button erscheint, wenn das Kontrollkästchen in jedem
liaktiviert wurde.Ist
:nth-childdas, was ich dafür verwenden soll, oder gibt es etwas anderes?Vielen Dank für jede Hilfe, die Sie mir geben können.
Ich denke an JavaScript
Es funktioniert, danke :)
Schön. Vielen Dank für die klare Darstellung :-)
Vielen Dank für die prägnante Erklärung der :nth-child Pseudoklasse. Sehr hilfreich – sie klärt viel über diesen mächtigen Selektor auf. Ich bin nun gut genug damit vertraut, um ihn zu verwenden.
Hallo Experten,
Ich versuche, ein CSS-Code-Fragment zu schreiben, um die Tabelle im SAP Design Studio Tool zu formatieren. In einer der Tabellen habe ich CSS, um eine bestimmte Spalte der Tabelle beim Hovern basierend auf dem n-ten Kind-Selektor hervorzuheben. Unten ist der Ausschnitt.
.Table1 .sapzencrosstab-RowHeaderArea:hover tr > td:nth-child(4)
{
text-decoration: underline !important;
cursor: pointer !important;
}
Ist es möglich, hier den Namen der Spaltenüberschrift anzugeben, anstatt ihn als 4. Spalte festzulegen? Die Anforderung ist, die Spalte namens „Region“ zu überfliegen, anstatt sie als 4. Spalte zu bezeichnen, da sich die Region-Dimension bei Drilldowns durch andere Dimensionen in der Tabelle ändern kann.
Ich habe in Foren gesucht, um die CSS-Klassen und mögliche Workarounds zu finden, aber keine gefunden.
Vielen Dank & Grüße,
Kesavan.
Hallo,
Der Satz „Aber die Schlüsselwörter oder eine Formel durchlaufen alle Kinder des übergeordneten Elements und wählen übereinstimmende Elemente aus“
ist das auch richtig nach meinem Verständnis -> „Aber die Schlüsselwörter oder Formel gehen zu jedem Kindelement des übergeordneten Elements und wählen übereinstimmende Elemente aus“
anstatt ‚iterate through‘ kann es auch wie oben erklärt werden, ist das auch richtig nach meinem Verständnis?
Wie kann ich mit CSS eine bestimmte Anzahl der letzten Kinder auswählen?
Zum Beispiel gibt es insgesamt 12 Elemente. Ich möchte meinen Stil nur auf die letzten n (1, 2, 3…) Kinder von insgesamt 12 Elementen anwenden; wie kann ich das tun?
Das funktioniert gut, wenn alle Kinder vom gleichen Typ sind (Element, Klasse…)
.parent>.child:nth-last-child(-n+3) { /* die letzten drei Elemente mit der Klasse „child“ auswählen, die direkte Kinder von Elementen mit der Klasse „parent“ sind */ } oder nur
.child:nth-last-child(-n+3) { /* die letzten drei Kinder mit der Klasse „child“ auswählen */ }
Das Problem ist, wenn es unterschiedliche Kinder gibt und Sie nur die letzten wenigen einer Untergruppe davon mit derselben Klasse auswählen möchten.
Dieses
:nth-last-child(-n+3 of selector)erlaubt es Ihnen, sogar nach Klasse auszuwählen, aber leider wird es nirgendwo außer in Safari unterstützt.Ich bin mir nicht sicher, wie man das für .class für alle Browser macht, aber ich neige dazu, das mit Element-Tags zu lösen, wenn möglich
Untertitel
Text1
Text2
Text3
Text4
Hergestellt von
.parent>section:nth-last-of-type(-n+3) { /* die letzten drei section-Elemente auswählen, die direkte Kinder von Elementen mit der Klasse „parent“ sind */ } (dummes Beispiel, ich weiß..)
Hallo, ich versuche, einige Divs nach jedem X-ten P einzufügen, kann ich das dafür verwenden? Ich habe das hier, was irgendwie funktioniert, aber es platziert einige „zufällige“ Werbeanzeigen-Header an komischen Stellen und es scheint die Elemente nicht in der Reihenfolge zu platzieren, in der ich sie eingegeben habe (1,2,3,4), $(document).ready(function(){
$(‘
Werbung
‘).insertAfter(‘#mvp-content-main p:nth-child(2)’);
$(‘
Werbung
‘).insertAfter(‘#mvp-content-main p:nth-child(5)’);
$(‘
Werbung
‘).insertAfter(‘#mvp-content-main p:nth-child(10)’);
$(‘
Werbung
‘).insertAfter(‘#mvp-content-main p:nth-child(18)’);
Hallo,
Danke für einen tollen Artikel…
Ich versuche herauszufinden, ob es eine Formel gibt, die sich auf eine Spalte unabhängig von allen anderen Spalten oder Zeilen konzentriert, zum Beispiel, um bei der Grid-Analogie die erste Zelle eines Grids eine andere Breite als die anderen Zellen zu geben?
Danke.
Ich würde gerne wissen, ob es eine Möglichkeit gibt, die 2. Klasse zu targetieren, wenn es 2 Klassen mit demselben Namen gibt.
Ich habe 2 Instanzen von media-link innerhalb eines DIVs namens item. Ich muss im Grunde zusätzliche Stile zur 2. Instanz der Klasse hinzufügen. Hier liegt jedoch die Schwierigkeit... Ich kann keinen zusätzlichen Code oder keine Klassen zum Code hinzufügen! Ich weiß, nicht ideal, aber es liegt an der verwendeten Lösung, nicht an persönlicher Wahl.
Beispielcode
Autor: John Smith
Wie kann ich die Schriftfarbe steuern, wenn ich dieses CSS einstelle?
Angesichts all der unbeantworteten Fragen hier – und da ich noch eine Frage stellen möchte – vielleicht hier einen Link zu slackexchange oder einem separaten Forum hinzufügen, da die Fragen nach den Beiträgen verloren gehen? Keine Ahnung. Ich denke nur darüber nach. Aber ich werde meine Frage nicht stellen!! lol
Es wäre schön zu erwähnen, ob der Index des ersten Elements 0 oder 1 ist. Ich benutze diese Selektoren nicht täglich und jedes Mal, wenn ich sie benutzen muss, suche ich nach dieser Information, auch hier. Danke!
Es ist 1
Was ist, wenn man das Element innerhalb einer bestimmten Grenze auswählen muss, zum Beispiel von Element 5 bis Element 10? Dann wie kann man das tun?
Sind
display:noneElemente mit diesem Selektor wählbar?Gibt es eine Möglichkeit, die Elemente von 3 bis zum letzten auszuwählen?