Zanim zastosujesz logikę An+B, przefiltruj wstępnie zbiór elementów podrzędnych.
Selektory pseudoklasy :nth-child()
i :nth-last-child()
Selektor pseudoklasy :nth-child()
umożliwia wybieranie elementów w DOM według ich indeksu. Dzięki mikroskładance An+B
możesz precyzyjnie wybierać elementy, które chcesz wybrać.
:nth-child(2)
: wybierz drugie dziecko.:nth-child(2n)
: wybierz wszystkie elementy podrzędne (2, 4, 6, 8 itd.).:nth-child(2n+1)
: zaznacz wszystkie nieparzyste dzieci (1, 3, 5, 7 itd.).:nth-child(5n+1)
: wybierz pierwszy element (=(5×0)+1), 6. (=(5×1)+1), 11. (=(5×2)+1), ... element podrzędny.:nth-child(5n+2)
: wybierz drugi (=(5×0)+2), 7. (=(5×1)+2), 12 (=(5×2)+2), ... element podrzędny.
Możesz jednak wybrać więcej kreacji, jeśli pominiesz parametr A
. Na przykład:
:nth-child(n+3)
: wybierz wszystkie dzieci od trzeciego, (3, 4, 5 itd.).:nth-child(-n+5)
: wybierz każde dziecko przed piątym dniem zajęć (1, 2, 3, 4, 5).
Gdy połączysz kilka z tych opcji (:nth-child()
), możesz wybrać zakresy elementów:
:nth-child(n+3):nth-child(-n+5)
: wybierz wszystkie dzieci od 3. do 5. (3, 4, 5).
Funkcja :nth-last-child()
umożliwia wybranie podobnych ustawień, ale zamiast zacząć liczyć od początku, zaczynasz liczyć od końca.
Filtrowanie wstępne o składni of S
Nowość w selektorach arkusza CSS na poziomie 4 umożliwia opcjonalnie przekazywanie listy selektora do funkcji :nth-child()
i :nth-last-child()
.
:nth-child(An+B [of S]?)
:nth-last-child(An+B [of S]?)
Jeśli określono of S
, logika An+B
jest stosowana tylko do elementów, które pasują do danej listy selektora S
. Zasadniczo oznacza to, że możesz wstępnie odfiltrować elementy podrzędne, zanim An+B
zadziała.
Obsługa przeglądarek
- 111
- 111
- 113
- 9
Przykłady
Na przykład :nth-child(2 of .highlight)
wybiera drugi pasujący element, który ma klasę .highlight
. Inaczej: spośród wszystkich dzieci z klasą .highlight
wybierz drugą.
W przeciwieństwie do elementu .highlight:nth-child(2)
, który wybiera element mający klasę .highlight
oraz drugi element podrzędny.
Możesz zobaczyć tę różnicę w poniższym przykładzie:
- Element pasujący do
:nth-child(2 of .highlight)
ma różowy kontur. - Element pasujący do
.highlight:nth-child(2)
ma zielony kontur.
Pamiętaj, że S
jest listą selektorów, co oznacza, że akceptuje wiele selektorów rozdzielonych przecinkami. Na przykład :nth-child(4 of .highlight, .sale)
wybiera z zestawu elementów równorzędnych czwarty element, który jest .highlight
lub .sale
.
W poniższym przykładzie element pasujący do :nth-child(4 of .highlight, .sale)
ma pomarańczowy kontur.
Zebra, nowa odsłona
Klasycznym przykładem, w którym jest używany element :nth-child()
, jest tworzenie tabeli w paski zebry. Jest to technika wizualna, w której każdy wiersz tabeli zmienia się kolorem. Zazwyczaj procedura wygląda tak:
tr:nth-child(even) {
background-color: lightgrey;
}
Jest to rozwiązanie w przypadku tabel statycznych, ale po rozpoczęciu dynamicznego filtrowania zawartości tabeli problem staje się problematyczny. Jeśli na przykład wiersz drugi zostanie ukryty, będzie on widoczny w wierszu 1 i 3, z których każdy będzie mieć ten sam kolor tła.
Aby rozwiązać ten problem, możemy wykorzystać funkcję :nth-child(An+B [of S]?)
, wykluczając ukryte wiersze z logiki An+B
:
tr:nth-child(even of :not([hidden])) {
background-color: lightgrey;
}
Trochę słodko, prawda?
Zdjęcie: Markus Spiske, Unsplash