Prefiltra un insieme di elementi secondari prima di applicarvi la logica An+B.
I selettori di pseudo-classe :nth-child()
e :nth-last-child()
Con il selettore di pseudo-classi :nth-child()
è possibile selezionare gli elementi nel DOM in base al relativo indice. Con la microsintassi An+B
hai un controllo preciso sugli elementi da selezionare.
:nth-child(2)
: seleziona il secondo figlio.:nth-child(2n)
: seleziona tutti i figli, (2°, 4°, 6°, 8° e così via).:nth-child(2n+1)
: seleziona tutti i figli dispari (1°, 3°, 5°, 7° e così via).:nth-child(5n+1)
: seleziona il primo (=(5×0)+1), il sesto (=(5×1)+1), l'undicesimo (=(5×2)+1), ... elemento secondario.:nth-child(5n+2)
: seleziona il 2° (=(5×0)+2), 7° (=(5×1)+2), 12° (=(5×2)+2), ... elemento secondario.
Tuttavia, se ometti il parametro A
, puoi effettuare più selezioni di creatività. Ad esempio:
:nth-child(n+3)
: seleziona tutti i bambini dal 3° in su (3°, 4°, 5° e così via).:nth-child(-n+5)
: seleziona tutti i bambini fino al quinto posto (1°, 2°, 3°, 4°, 5°).
Combina alcune di queste :nth-child()
selezioni e puoi selezionare intervalli di elementi:
:nth-child(n+3):nth-child(-n+5)
: seleziona tutti i bambini dal 3° al 5° (3°, 4°, 5°).
Con :nth-last-child()
puoi effettuare selezioni simili, ma invece di iniziare a contare dall'inizio, inizi a contare dalla fine.
Pre-filtro delle selezioni con la sintassi of S
Una novità del livello 4 dei selettori CSS è la possibilità di passare facoltativamente un elenco di selettori a :nth-child()
e :nth-last-child()
.
:nth-child(An+B [of S]?)
:nth-last-child(An+B [of S]?)
Quando of S
è specificato, la logica An+B
viene applicata solo agli elementi che corrispondono all'elenco di selettori S
specificato. Ciò significa in sostanza che puoi prefiltrare i bambini prima che An+B
faccia il suo lavoro.
Supporto dei browser
- 111
- 111
- 113
- 9
Esempi
Ad esempio, :nth-child(2 of .highlight)
seleziona il secondo elemento corrispondente che ha la classe .highlight
. In altre parole, tra tutti i bambini del corso .highlight
, seleziona il secondo.
A differenza di .highlight:nth-child(2)
, che seleziona l'elemento che ha la classe .highlight
e è anche il secondo elemento secondario.
Nella demo qui sotto puoi vedere questa differenza:
- L'elemento che corrisponde a
:nth-child(2 of .highlight)
ha un contorno rosa. - L'elemento che corrisponde a
.highlight:nth-child(2)
ha un contorno verde.
Tieni presente che S
è un elenco di selettori, il che significa che accetta più selettori separati da una virgola. Ad esempio, :nth-child(4 of .highlight, .sale)
seleziona il quarto elemento, che è .highlight
o .sale
da un insieme di elementi di pari livello.
Nella demo seguente, all'elemento che corrisponde a :nth-child(4 of .highlight, .sale)
è applicato un contorno arancione.
A righe a righe, rivisitato
Un esempio classico in cui viene utilizzato :nth-child()
è la creazione di una tabella con righe zebrate. È una tecnica visiva in cui ogni riga della tabella alterna colori. Normalmente, il problema viene affrontato nel seguente modo:
tr:nth-child(even) {
background-color: lightgrey;
}
Sebbene questo metodo funzioni correttamente per le tabelle statiche, diventa problematico quando si inizia a filtrare dinamicamente i contenuti della tabella. Ad esempio, quando la riga due viene nascosta, vengono visualizzate le righe 1 e 3, ciascuna con lo stesso colore di sfondo.
Per risolvere il problema, possiamo utilizzare :nth-child(An+B [of S]?)
escludendo le righe nascoste dalla logica An+B
:
tr:nth-child(even of :not([hidden])) {
background-color: lightgrey;
}
Non male, vero?
Foto di Markus Spiske su Unsplash