:nth-of-type
Selector vă permite să selectați unul sau mai multe elemente bazate pe ordinea lor sursă, conform unei formule. Este definit în specificațiile de nivel 3 CSS Selectors ca o „pseudo-clasă structurală”, ceea ce înseamnă că este folosit pentru stilizarea conținutului pe baza relației sale cu elementele părinte și frate.
Să presupunem că avem o listă neordonată și dorim să „listăm zebra” alternând elementele listei:
- First Item
- Second Item
- Third Item
- Fourth Item
- Fifth Item
În loc să adăugăm clase la fiecare articol din listă (de exemplu, .even
& .odd
) putem folosi :nth-of-type
:
li ( background: slategrey; ) /* select alternating items starting with the second item */ li:nth-of-type(2n) ( background: lightslategrey; )
După cum puteți vedea, :nth-of-type
acceptă un argument: acesta poate fi un singur număr întreg, cuvintele cheie „par” sau „impar” sau o formulă așa cum se arată mai sus. Dacă este specificat un număr întreg, este selectat un singur element - dar cuvintele cheie sau o formulă vor itera prin toți copiii elementului părinte și vor selecta elemente potrivite - similar cu elementele de navigare dintr-o matrice în JavaScript. Cuvintele cheie „par” și „impar” sunt simple, dar formula este construită folosind sintaxa an+b
, unde:
- „A” este o valoare întreagă
- „N” este litera literală „n”
- „+” Este un operator și poate fi „+” sau „-”
- „B” este un număr întreg și este necesar dacă un operator este inclus în formulă
Este important să rețineți că această formulă este o ecuație și iterează prin fiecare element frate, determinând care va fi selectat. Partea „n” a formulei, dacă este inclusă, reprezintă un set de numere întregi pozitive în creștere (la fel ca iterația printr-o matrice). În exemplul nostru de mai sus, am selectat fiecare al doilea element cu formula 2n
, care a funcționat deoarece de fiecare dată când un element a fost bifat, „n” a crescut cu unul (2 × 0, 2 × 1, 2 × 2, 2 × 3 etc.). Dacă ordinea unui element se potrivește cu rezultatul ecuației, acesta este selectat (2, 4, 6 etc.). Pentru o explicație mai aprofundată a matematicii implicate, vă rugăm să citiți acest articol.
Pentru a ilustra în continuare, iată câteva exemple de :nth-of-type
selectoare valide :
Verificați acest stilou!
Din fericire, nu trebuie să faceți întotdeauna calculul singur - există mai mulți :nth-of-type
testeri și generatoare acolo:
- CSS-Tricks Tester
- Testerul lui Lea Verou
Puncte de interes
:nth-of-type
itera prin elemente începând din partea de sus a ordinii sursă. Singura diferență dintre acesta și:nth-last-of-type
este că acesta din urmă iterează prin elemente începând de la partea de jos a ordinii sursă.:nth-of-type
Selectorul este foarte similar cu ,:nth-child
dar cu o singură diferență esențială: este mai specific. În exemplul nostru de mai sus, ei ar produce același rezultat, deoarece vom itera doarli
elemente, dar dacă am itera pe un grup mai complex de frați, am:nth-child
încerca să potrivim toți frații, nu numai frații de același tip de element. Acest lucru dezvăluie puterea:nth-of-type
-it vizează un anumit tip de element într-un aranjament în raport cu frați similari, nu toți frații.
Suport pentru browser
Crom | Safari | Firefox | Operă | IE | Android | iOS |
---|---|---|---|---|---|---|
Lucrări | 3.2+ | Lucrări | 9.5+ | 9+ | Lucrări | Lucrări |
:nth-of-type
a fost introdus în CSS Selectors Module 3, ceea ce înseamnă că versiunile vechi ale browserelor nu o acceptă. Cu toate acestea, suportul modern pentru browser este impecabil, iar noile pseudo-selectoare sunt utilizate pe scară largă în mediile de producție. Dacă aveți nevoie de suport pentru browser mai vechi, fie polyfill pentru IE, fie utilizați acești selectori în moduri non-critice pentru îmbunătățirea progresivă, ceea ce este recomandat.