Ce face :nth-of-type(), :nth-last-child() și :nth-child(An+B of S)
:nth-child() numără toți copiii unui părinte, indiferent de tag. Variantele lui rezolvă situațiile în care acest lucru nu ajunge:
• :nth-of-type(n) numără doar frații cu același tag (de exemplu doar paragrafele, ignorând imaginile dintre ele).
• :nth-last-child(n) și :nth-last-of-type(n) numără de la ultimul element spre primul.
• :first-of-type, :last-of-type, :only-child, :only-of-type sunt scurtături pentru cazurile frecvente.
Toate acceptă formula An+B: 2n sau even (pare), 2n+1 sau odd (impare), 3n (fiecare al treilea), n+4 (de la al patrulea încolo), -n+3 (primele trei).
Sintaxa :nth-child(An+B of S) numără doar copiii care se potrivesc cu selectorul S. Este utilă la tabelele filtrate: dacă ascunzi unele rânduri cu o clasă, :nth-child(odd of .vizibil) păstrează alternanța corectă a culorilor doar printre rândurile afișate.
Valori uzuale
| Valoare | Descriere |
|---|---|
:nth-of-type(An+B) |
Al n-lea element de același tip printre frații săi. |
:nth-last-child(An+B) |
Al n-lea copil, numărând de la sfârșit. |
:nth-last-of-type(An+B) |
Al n-lea element de același tip, numărând de la sfârșit. |
:first-of-type / :last-of-type |
Primul / ultimul element de acel tip din părinte. |
:only-child |
Elementul care este singurul copil al părintelui. |
:nth-child(An+B of S) |
Numără doar copiii care se potrivesc cu selectorul S. |
Exemple
Exemplul 1: Litera mare doar la primul paragraf, chiar dacă articolul începe cu o imagine
p:first-child nu ar funcționa aici, pentru că primul copil al articolului este o imagine.
/* Structura: <article> <img> <p> <p> <p> </article> */
.articol p:first-of-type::first-letter {
float: left;
font-size: 3em;
line-height: 1;
margin-right: 6px;
color: #b45309;
}
/* Ultimele 2 paragrafe, mai mici (note de subsol) */
.articol p:nth-last-of-type(-n + 2) {
font-size: 0.875rem;
color: #64748b;
}
Efect vizual în browser
În articolul despre Cluj, primul paragraf de după fotografie începe cu un „C” mare, maro, pe trei rânduri. Ultimele două paragrafe apar cu text mai mic și gri, ca note de final.
Exemplul 2: Rânduri alternante corecte într-un tabel filtrat
Rândurile ascunse nu mai strică alternanța, pentru că se numără doar rândurile cu clasa .vizibil.
tr.ascuns {
display: none;
}
tbody tr:nth-child(even of .vizibil) {
background-color: #f1f5f9;
}
Efect vizual în browser
Tabelul cu note (Ana 9.50, Mihai 8.75, Ioana 10, Radu 7.25) filtrat după „note peste 8” afișează Ana, Mihai și Ioana. Rândul lui Mihai are fundal gri-deschis, chiar dacă rândul ascuns al lui Radu se află între ei în HTML.
Greșeli frecvente
- Folosirea :nth-of-type() cu o clasă (.card:nth-of-type(2)) crezând că numără doar elementele cu acea clasă; :nth-of-type numără după tag, nu după clasă. Pentru clase folosește :nth-child(2 of .card).
- Scrierea formulei cu spații greșite sau inversată (n-3 în loc de -n+3); -n+3 înseamnă primele trei, n+3 înseamnă de la al treilea încolo.
Comenzi înrudite
Pseudo-clase (:hover, :focus, :active, :nth-child): Stilizează un element în funcție de starea sa (interacțiune cu mouse-ul, tastatura) sau poziția structurală în listă.:not() (negarea selectorilor): Selectează elementele care NU corespund selectorilor din paranteză, de exemplu toate elementele unei liste, mai puțin ultimul.:is() și :where(): Grupează mai mulți selectori într-unul singur; :is() păstrează specificitatea celui mai puternic argument, :where() are specificitate zero.Combinatori CSS (descendent, copil >, frate +, ~): Exprimă relația structurală dintre două elemente: descendență, copil direct sau elemente surori în DOM.