:nth-child
Volič umožňuje vybrat jeden nebo více prvků na základě jejich zdrojové pořadí, podle vzorce.
/* 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) ( )
Ve specifikaci CSS Selectors Level 3 je definována jako „strukturní pseudotřída“, což znamená, že se používá ke stylování obsahu na základě jeho vztahu k nadřazeným a sourozeneckým prvkům.
Předpokládejme, že stavíme mřížku CSS a chceme odstranit okraj na každém čtvrtém mřížkovém modulu. Tady je HTML:
One Two Three Four Five
Místo přidání třídy ke každé čtvrté položce (např. .last
) Můžeme použít :nth-child
:
.module:nth-child(4n) ( margin-right: 0; )
:nth-child
Volič se argument: to může být jeden celé číslo, klíčová slova even
, odd
nebo vzorec. Pokud je zadáno celé číslo, je vybrán pouze jeden prvek - ale klíčová slova nebo vzorec budou iterovat všemi podřízenými prvky nadřazeného prvku a vyberou odpovídající prvky - podobně jako při procházení položek v poli JavaScriptu. Klíčová slova „sudý“ a „lichý“ jsou přímočará (2, 4, 6 atd. Nebo 1, 3, 5). Vzorec je sestaven pomocí syntaxe an+b
, kde:
- „A“ je celočíselná hodnota
- „N“ je doslovné písmeno „n“
- „+“ Je operátor a může to být „+“ nebo „-“
- „B“ je celé číslo a je vyžadováno, pokud je do vzorce zahrnut operátor
Je důležité si uvědomit, že tento vzorec je rovnice a iteruje každým prvkem sourozence a určuje, který bude vybrán. Část vzorce „n“, pokud je zahrnuta, představuje sadu zvyšujících se kladných celých čísel (stejně jako iterace v poli). V našem výše uvedeném příkladu jsme vybrali každý čtvrtý prvek pomocí vzorce 4n
, který fungoval, protože pokaždé, když byl prvek zkontrolován, se „n“ zvýšilo o jeden (4 × 0, 4 × 1, 4 × 2, 4 × 3 atd.). Pokud se pořadí prvku shoduje s výsledkem rovnice, bude vybrán (4, 8, 12 atd.). Podrobnější vysvětlení zapojené matematiky naleznete v tomto článku.
Pro další ilustraci uvádíme několik příkladů platných :nth-child
selektorů:
Naštěstí nemusíte vždy dělat matematiku sami - existuje několik :nth-child
testerů a generátorů:
- Tester triků CSS
- Tester Lea Verou
: nth-child (an + b of)
Existuje málo známý filtr, do kterého lze přidat :nth-child
podle specifikace CSS Selectors: Schopnost vybrat :nth-child
podmnožinu prvků pomocí of
formátu. Předpokládejme, že máte seznam smíšeného obsahu: Některé mají třídu .video
, jiné třídu .picture
a chcete vybrat první 3 obrázky. Můžete to udělat s filtrem „of“ takto:
:nth-child(-n+3 of .picture) ( /* Selects the first 3 elements applied not to ALL children but only to those matching .picture */ )
Všimněte si, že se to liší od připojení selektoru přímo k :nth-child
selektoru:
.picture:nth-child(-n+3) ( /* Not the same! This applies to elements matching .picture which _also_ match :nth-child(-n+3) */ )
To může být trochu matoucí, takže příklad může pomoci ilustrovat rozdíl:
Podpora prohlížeče pro filtr „of“ je velmi omezená: V době psaní tohoto článku podporovala syntaxi pouze Safari. Chcete-li zkontrolovat stav svého oblíbeného prohlížeče, jsou zde otevřené problémy související s :nth-child(an+b of s)
:
- Firefox: Podpora nth-child (An + B of sel)
- Chrome: Implementace: nth-child (an + b of S)
Body zájmu
:nth-child
iteruje prvky počínaje od horní části zdrojové objednávky. Jediný rozdíl mezi ním a tím:nth-last-child
je, že tento iteruje prvky, které začínají od spodní části zdrojové objednávky.- Syntaxe pro výběr prvního
n
počtu prvků je trochu protiintuitivní. Začnete s-n
plus kladným počtem prvků, které chcete vybrat. Napříkladli:nth-child(-n+3)
vybere první 3li
prvky. :nth-child
Volič je velmi podobná:nth-of-type
, ale s jedním kritickým rozdílem, že je méně specifické. V našem příkladu výše by produkovali stejný výsledek, protože iterujeme pouze nad.module
prvky, ale pokud bychom iterovali nad složitější skupinou sourozenců,:nth-child
pokusili bychom se shodovat se všemi sourozenci, nejen se sourozenci stejného typu prvku. To odhaluje sílu:nth-child
-it může vybrat jakýkoli sourozenecký prvek v uspořádání, nejen prvky, které jsou uvedeny před dvojtečkou.
Podpora prohlížeče
Chrome | Safari | Firefox | Opera | TJ | Android | iOS |
---|---|---|---|---|---|---|
Žádný | 3,2+ | Žádný | 9,5+ | 9+ | Žádný | Žádný |
:nth-child
byl představen v modulu CSS Selectors Module 3, což znamená, že staré verze prohlížečů jej nepodporují. Podpora moderních prohlížečů je však dokonalá a nové pseudo-selektory jsou široce používány v produkčním prostředí. Pokud požadujete podporu starších prohlížečů, buď polyfill pro IE, nebo použijte tyto selektory nekritickými způsoby á la progresivní vylepšení, které se doporučuje.