Existuje takový selektor, konkrétněji pseudotřída, nazvaná :nth-child . Zde je příklad jeho použití:

UL LI:n-té dítě(3n+3) ( barva:#CCC; )

Co dělá výše uvedený CSS? Vybere každý třetí prvek v seznamu s odrážkami: je to 3., 6., 9., 12. a tak dále. Podívejme se, jak přesně tento výraz funguje a co dalšího lze dělat s :nth-child .

Vše záleží na tom, co je mezi závorkami. Selektor :nth-child přijímá dvě klíčová slova: sudé a liché . Zde je to jednoduché: sudé vybere sudé prvky, jako je 2., 4., 6. atd., a liché vybírá liché prvky, jako je 1., 3., 5. atd. d.

Jak můžete vidět z prvního příkladu, :nth-child také přijímá výrazy jako parametr. Včetně těch nejjednodušších rovnic, jinými slovy jen čísel. Pokud je vložíte do závorek, bude vybrán pouze jeden prvek s odpovídajícím číslem. Zde je například postup, jak vybrat pouze pátý prvek:

UL LI:nth-child(5) ( barva:#CCC; )

Vraťme se však k 3n+3 z prvního příkladu. Jak to funguje a proč je vybrán každý třetí prvek? Celý trik je v pochopení proměnné n a redukované algebraické rovnici. Představte si n jako nulovou sadu celých čísel. Potom doplňte rovnici. Takže 3n je 3×n a celá rovnice dohromady je (3×n)+3. Nyní dosazením čísel větších nebo rovných nule místo n dostaneme:

  • (3 × 0) + 3 = 3 = 3. prvek
  • (3 × 1) + 3 = 6 = 6. prvek
  • (3 × 2) + 3 = 9 = 9. prvek atd.

A co: n-té dítě (2n+1) ?

  • (2 × 0) + 1 = 1 = 1. prvek
  • (2×1) + 1 = 3 = 3. prvek
  • (2 × 2) + 1 = 5 = 5. prvek atd.

Ano, přestaň! Je to stejné jako liché. Pak byste možná neměli používat tento výraz? Nekomplikujeme si ale v tomto případě náš první příklad? Co když místo 3n+3 napíšeme 3n+0 nebo ještě jednodušší 3n ?

  • (3 × 0) = 0 = nic
  • (3 × 1) = 3 = 3. prvek
  • (3 × 2) = 6 = 6. prvek
  • (3 × 3) = 9 = 9. prvek atd.

Takže, jak vidíte, výsledek je stejný, což znamená, že není potřeba +3 . Záporné hodnoty n můžeme použít stejně dobře jako odčítání v rovnicích. Například 4n-1:

  • (4 × 0) - 1 = -1 = nic
  • (4 × 1) - 1 = 3 = 3. prvek
  • (4 × 2) - 1 = 7 = 7. prvek atd.

Použití -n se může zdát zvláštní - protože pokud je konečný výsledek záporný, do výběru nebudou spadat žádné prvky. Ale pokud doplníte rovnici a výsledek bude opět kladný, pak se vzorek ukáže jako docela zajímavý: s ním můžete získat prvních n prvků, například takto: -n + 3:

  • –0 + 3 = 3 = 3. prvek
  • –1 + 3 = 2 = 2. prvek
  • -2 + 3 = 1 = 1. prvek
  • -3 + 3 = 0 = nic atd.

SitePoint má pěkného průvodce s pěkným nápisem, který zde bezostyšně zveřejním:

n 2n+1 4n+1 4n+4 4n 5n-2 -n+3
0 1 1 4 3
1 3 5 8 4 3 2
2 5 9 12 8 8 1
3 7 13 16 12 13
4 9 17 20 16 18
5 11 21 24 20 23

Podpora prohlížeče

Selektor :nth-child je jedním z mála selektorů CSS, který je téměř plně podporován moderní prohlížeče a není absolutně podporován v IE, dokonce ani IE8. Takže pokud jde o jeho použití a konečným výsledkem je progresivní vylepšování, můžete jej bezpečně použít pro některé typografické prvky, jako je vybarvování řádků tabulky. Neměl by se však používat ve vážnějších případech. Spolehněte se na to například v rozložení webu nebo odstraňte pravý okraj z každého třetího bloku v mřížce tři krát tři, aby se vešly do řady.

CSS n-té dítě je pseudotřída používaná k výběru prvků pomocí číselného výrazu. Jeho syntaxe může na první pohled působit trochu zmateně.

V tomto článku se podíváme na:

  • různé způsoby použití :nth-child ;
  • flexibilnější :selektor n-tého typu;
  • a jejich přidružené selektory :nth-last-child a :nth-last-of-type.

:n-tý-poslední-typu

:nth-last-of-type vybere podřízené prvky, pokud jejich pozice v dokumentu odpovídá vzoru popsanému algebraickým výrazem.

Selektor :nth-last-of-type vypadá asi takto:

li:n-té dítě(výraz); ()

"Výraz" může být reprezentován klíčovými slovy sudý nebo lichý , celé číslo nebo vzorec jako an+b , kde aab jsou celá čísla, kladná nebo záporná.

Protože CSS pseudotřída n-tého potomka může být použita k výběru rozsahu různé prvky. Podívejme se na pár příkladů, aby to bylo jasnější.

mám seznam s odrážkami z 12 prvků. Podívejme se, jak můžeme použít :nth-child k výběru konkrétního prvku nebo sady prvků ve vzoru:

  • lorem ipsum
  • lorem ipsum
  • lorem ipsum
  • lorem ipsum
  • lorem ipsum
  • lorem ipsum
  • lorem ipsum
  • lorem ipsum
  • lorem ipsum
  • lorem ipsum
  • lorem ipsum
  • lorem ipsum

Chcete-li vybrat třetí prvek seznamu, musíte zadat li:nth-child(3) . Klíčové slovo sudé můžete použít k výběru všech sudých prvků. A naopak, můžete použít :nth-child(liché) k výběru všech prvků s lichým číslem.

CSS n-té dítě každé 3. – zadejte li:nth-child(3n) . Chcete-li vybrat první čtyři prvky, použijte li:nth-child(-n+4) . Chcete-li vybrat všechny prvky kromě prvních čtyř, lze použít li:nth-child(n+5).

Výraz an + b

Alternativou k použití klíčového slova odd je použití výrazu 2n+1 . Ale jak to funguje?

Když výraz an+b obsahuje nenulové hodnoty aab, podřízené prvky se rozdělí do skupin. Pokud je výraz 2n+1 , podřízené prvky jsou rozděleny do skupin po dvou. Každému prvku ve skupině je přiřazen index začínající na 1 . Odpovídajícím prvkem v každé skupině je indexové číslo b . V našem příkladu to bude první prvek.

Pokud je výraz 3n+2 , jsou prvky seskupeny podle tří prvků a druhý prvek v každé skupině odpovídá výrazu.

Pokud je hodnota b záporná, odpovídající prvek ve skupině je prvek na indexu b . Ale počítá se zpětně od indexu 1 . V tomto případě nebude odpovídající prvek patřit do této, ale do předchozí skupiny.

Klíčové slovo sudé v CSS n-tého potomka lze vyjádřit jako 2n . V tomto případě nemáme hodnotu pro b , takže je vybrán každý prvek skupiny s indexem a; 2n vybere každý druhý prvek, 3n vybere každý třetí, 4n vybere každý čtvrtý a tak dále.

Osobně považuji koncept rozdělení podřízených prvků do skupin a hledání indexu shody pro každou skupinu velmi matoucí. I když je to takto popisuje specifikace CSS selektorů.

Preferuji koncept hledání každého n-tého prvku – každého 2., 3. nebo 4. atd. A pak je pro mě snazší si představit, že druhá část výrazu je ofset.

V případě 2n+1 čtu tento výraz takto: " Najděte každý druhý prvek a posuňte výběr dolů o 1».

Pokud je výraz 3n-5 , bude znít takto: " Najděte každý třetí prvek a posuňte výběr nahoru o 5».

Další voliče: n-té dítě

:nth-child má odpovídající pseudotřídu :nth-last-child , která funguje naopak.

li:nth-last-child(3n) začíná od posledního podřízený prvek a zpracovává je zpětně, přičemž odpovídá každému třetímu prvku od konce seznamu.

Tato pseudotřída je méně běžná. Často je však nutné vybrat první nebo poslední podřízený prvek. To lze provést pomocí :nth-child(1) nebo :nth-last-child(1) , ale tato metoda není tak běžná jako pseudotřídy :first-child a :last-child. V IE8 však funguje pouze :first-child , :last-child a :nth selektory ne.

:n-tý typ

Často mi vadí, že pseudotřída n-tého potomka CSS třídí podřízené prvky podle indexu a nebere v úvahu typ prvku.

Zvažte následující příklad.

lorem ipsum;

Aenean commodo ligula eget dolor. Vestibulum dapibus nunc ac augue;

Nunc sed turpis. Donec posuere vulputate arcu;

Je zde oddíl s nadpisem, podnadpisem a několika odstavci. Chci aby první odstavec trochu vynikl větším písmem 1,5em .

Možná budete chtít zkusit použít kód sekce p:first-child, protože do prvního odstavce v této sekci musíte přidat další styl. Ale to nebude fungovat, protože prvním potomkem sekce je h1 . V tomto případě je nutné použít volič :first-of-type.

Existuje celá řada selektory tohoto typu jsou :first-of-type , :last-of-type , :nth-of-type a :nth-last-of-type . Chovají se stejně jako :nth-child , ale vybírají n-té instance prvků určitého typu.

Popis

Pseudotřída :nth-child se používá k přidání stylů do prvků na základě číslování ve stromu prvků.

Syntax

prvek:n-té dítě(liché | sudé |<число> | <выражение>) {...}

Hodnoty

odd Všechna lichá čísla prvků. sudá Všechna sudá čísla prvků. číslo Pořadové číslo dítěte vzhledem k jeho rodiči. Číslování začíná od 1, což bude první prvek v seznamu. výraz Zadán jako an+b , kde aab jsou celá čísla a n je čítač, který automaticky nabývá hodnoty 0, 1, 2...

Je-li a nula, pak se nezapisuje a zápis se redukuje na b . Pokud je b nula, pak se také vynechá a výraz se zapíše ve tvaru an . aab mohou být záporná čísla, v takovém případě se znaménko plus změní na mínus, například: 5n-1.

Při použití záporných hodnot pro aab mohou být některé výsledky také záporné nebo nulové. Prvky jsou však ovlivněny pouze kladnými hodnotami, protože číslování prvků začíná od 1.

V tabulce. 1 ukazuje některé možné výrazy a klíčová slova a také uvádí, o která čísla položek se bude jednat.

HTML5 CSS3 IE Cr Op Sa Fx

n-té dítě

21342135 213621372138
Olej1634 627457
Zlato469 725647
Dřevo773 793486
kameny2334 8853103

V tento příklad Pseudotřída :nth-child se používá ke změně stylu prvního řádku tabulky a také k obarvení všech sudých řádků (obrázek 1).

Vítám vás na svém blogu. Rád bych dnes napsal na téma, jak vybrat první nadřazený prvek v css, protože to umožňuje používat méně tříd stylů.

Pseudotřídy: první dítě a první typ, jaký je rozdíl?

Aby bylo možné odkazovat na první prvek z rodičovského kontejneru v css, byly vynalezeny dvě pseudotřídy. Okamžitě navrhuji zvážit vše na příkladu, abyste pochopili:

Toto je odstavec

Toto je odstavec

Toto je odstavec

Toto je odstavec

Toto je odstavec

Řekněme, že máme takové označení. Cílem je odkazovat na první odstavec a stylizovat jej odděleně od ostatních, aniž byste do něj přidávali třídy. To lze provést takto:

#wrapper p:první dítě(
Červená barva;
}

Barva prvního odstavce se změní na červenou, můžete zkontrolovat.

#wrapper p:první typu(
červená barva;
}

Stane se to samé. Jaký je tedy rozdíl? A spočívá v tom, že pseudotřída prvního typu hledá a najde první prvek rodiče, daný jeho typ, a první dítě nehledá nic - prostě vezme první prvek rodiče, který narazí, a pokud je to odstavec, použije na něj styly. Pokud ne, nic nebude vybráno a použito.

Toto je odstavec

Toto je odstavec

Toto je odstavec

Toto je odstavec

Toto je odstavec

Nyní zvažte: fungoval by v tomto případě první typ? Ano, protože bere v úvahu typ prvku a vybere první odstavec, nikoli první ze všech prvků. Bude první dítě pracovat? Zkus to. Nebude to fungovat, protože odstavec není prvním prvkem v nadřazeném prvku.

Osobně jsem hned nepochopil rozdíl mezi těmito pseudotřídami a chvíli jsem byl zmatený, ale teď jsem vám to, doufám, vysvětlil normálně.

Další důležitý detail

Prvky se počítají od nadřazeného prvku, takže pokud jste zadali takto:

Li:první typu(

}

Poté budou vybrány první položky seznamu v tagu body (tedy na celé stránce). V každém seznamu bude tedy první položka naformátována jinak.
Pokud píšete takto:

#sidebar li:first-of-type(

}

Poté budou vybrány pouze první položky seznamů v postranním panelu, tedy postranní sloupec na našem webu.

Pomocí různých selektorů, o kterých jsem psal, můžete dosáhnout téměř jakéhokoli prvku na webové stránce. V tomto článku si můžete přečíst více o tom, jak pracovat s pseudotřídou n-tého dítěte v css, a nabízí vám možnosti výběru prvků.

Mimochodem, zapomněl jsem zmínit opačné pseudotřídy - last-child (resp. last-of-type). Umožňují vám vybrat poslední prvek z nadřazeného kontejneru.

Kde můžete uvést do praxe

Píšu o těchto pseudotřídách, protože se aktivně používají při rozkládání css. Tady máte na stránce třeba blok podobných příspěvků, nebo komentářů, nebo něco jiného. A vy jste měli nápad nějak zvláštním způsobem ozdobit jeho první prvek. Nebo možná poslední. A ano, každý může.

Stačí zjistit název bloku, ve kterém je požadovaný prvek uložen. Řekněme, že máme co do činění s populárními deskami. Nadřazený kontejner má oblíbenou třídu. Pak píšeme takto:

Populární li:first-of-type(
Horní výplň: 20px
}

Všechno, první položka seznamu v něm dostala odsazení shora a do stylů si můžete přidávat, co chcete.

Zde je další příklad. Mám pouze tři stejné šedé bloky ve štítku těla. Pojďme psát takto.

Pseudotřídy lze použít k výběru konkrétního prvku ze seznamu. V tomto tutoriálu budeme hovořit o pseudotřídě :nth-child, o tom, co můžete s touto pseudotřídou vytvořit a jak může být užitečná. Pseudotřída :nth-child umožňuje vybrat skupinu prvků se společnými vlastnostmi. Nejčastěji se používá k výběru sudých nebo lichých prvků ze skupiny. Často se používá k tomu, aby stůl vypadal jako zebra tím, že dává různé barvy pozadí lichým a sudým řádkům.

tr:nth-child (liché) ( // barva pozadí ) tr:nth-child (sudé) ( // jiná barva pozadí )

Pseudotřída :nth-child také umožňuje rozdělit prvky se společnou vlastností do skupin a poté vybrat konkrétní prvek z každé skupiny pomocí následující syntaxe:

Tr:n-té dítě (an+b) ( )

Tady A určuje počet prvků ve skupině a b určuje, který prvek ze skupiny bude vybrán. Pokud použijete hodnotu 2n+1, pak budou prvky rozděleny do skupin po dvou a budou vybrány první prvky z každé skupiny, tj. prvky s lichým pořadovým číslem. Pokud použijete hodnotu 2n+2, pak budou prvky opět rozděleny do skupin po dvou, ale nyní budou vybrány druhé prvky z každé skupiny, tedy prvky se sudým pořadovým číslem.

Jako příklad pro pochopení pseudotřídy :nth-child vybereme s ní každý čtvrtý prvek, tedy čtvrtý, osmý, dvanáctý, šestnáctý atd. K tomu rozdělíme prvky do skupin po čtyřech a pak vyberte každý čtvrtý prvek.

Tr:nth-child (4n+4) ( // styl každého čtvrtého prvku )

Níže je seznam deseti prvků a k výběru prvků, které chceme zvýraznit, použijeme pseudotřídy :nth-child , :first-child a :last-child.

Použití CSS:nth-child Pseudo-Class k výběru jednoho prvku

Nastavením pseudotřídy :nth-child jako čísla si můžete vybrat, na které dítě ze skupiny se budete odkazovat:

Prvek 1
Prvek 2
Prvek 3
Prvek 4
Prvek 5
Prvek 6
Prvek 7
Prvek 8
Prvek 9
Prvek 10

#selector_example li:nth-child (4) ( velikost-fontu: 150

Použití CSS:nth-child Pseudo-Class k výběru všech prvků kromě prvních pěti

Pokud nastavíte pseudotřídu :nth-child na hodnotu formuláře n+číslo, můžete vybrat všechny prvky, počínaje prvkem s tímto pořadovým číslem:

Prvek 1
Prvek 2
Prvek 3
Prvek 4
Prvek 5
Prvek 6
Prvek 7
Prvek 8
Prvek 9
Prvek 10

#selector_example li:nth-child (n+6) ( velikost písma: 150 %; font-weight:bold ; barva:zelená; )

Použití CSS:nth-child Pseudo-Class k výběru pouze prvních pěti prvků

Když nastavíme pseudotřídu :nth-child na zápornou hodnotu n+číslo, vybereme všechny prvky, které jsou před prvkem s tímto pořadovým číslem:

Prvek 1
Prvek 2
Prvek 3
Prvek 4
Prvek 5
Prvek 6
Prvek 7
Prvek 8
Prvek 9
Prvek 10

#selector_example li:nth-child (-n+5) ( font-size: 150 %; font-weight:bold ; barva:zelená; )

Použití CSS:nth-child Pseudo-třída k výběru každého třetího prvku

Pseudotřída :nth-child může být použita k výběru posloupnosti prvků zadáním počtu prvků v posloupnosti a ordinálním číslem požadovaného prvku. Pokud nastavíte hodnotu 3n+1, bude vybrán každý třetí prvek, počínaje prvním:

Prvek 1
Prvek 2
Prvek 3
Prvek 4
Prvek 5
Prvek 6
Prvek 7
Prvek 8
Prvek 9
Prvek 10

#selector_example li:nth-child (3n+1) ( velikost písma: 150 %; font-weight:bold ; barva:zelená; )

Použití CSS:nth-child pseudotřídy k výběru pouze lichých prvků

Pseudotřídu :nth-child můžete nastavit na lichou, abyste vybrali všechny prvky s lichými pořadovými čísly. Tedy první, třetí, pátý, sedmý, devátý atd. prvek. To je velmi užitečné pro nastavení barev pro sousední řádky tabulky.

Prvek 1
Prvek 2
Prvek 3
Prvek 4
Prvek 5
Prvek 6
Prvek 7
Prvek 8
Prvek 9
Prvek 10

#selector_example li:nth-child (liché) (velikost písma: 150 %; font-weight:bold ; barva:zelená; )

Použití CSS:nth-child pseudotřídy k výběru pouze sudých prvků

Tento příklad ukazuje totéž jako předchozí, ale tentokrát jsou vybrány všechny sudé prvky. To znamená, že druhý, čtvrtý, šestý, osmý, desátý atd. prvek:

Prvek 1
Prvek 2
Prvek 3
Prvek 4
Prvek 5
Prvek 6
Prvek 7
Prvek 8
Prvek 9
Prvek 10

#selector_example li:nth-child (sudé) ( font-size: 150 %; font-weight:bold ; barva:zelená; )

Použití CSS:first-child Pseudo-Class k výběru prvního prvku

Další pseudotřída:první dítě vybere první prvek:

Prvek 1
Prvek 2
Prvek 3
Prvek 4
Prvek 5
Prvek 6
Prvek 7
Prvek 8
Prvek 9
Prvek 10

#selector_example li:first-child (velikost písma: 150 %; font-weight:bold ; barva:zelená; )

Použití CSS:last-child Pseudo-třída k výběru posledního prvku

Kromě pseudotřídy :first-child existuje pseudotřída :last-child, která vybere poslední prvek ze skupiny prvků:

Prvek 1
Prvek 2
Prvek 3
Prvek 4
Prvek 5
Prvek 6
Prvek 7
Prvek 8
Prvek 9
Prvek 10

#selector_example li:last-child (velikost-fontu: 150 %; font-weight:bold ; barva:zelená; )

Pomocí CSS pseudo-class:nth-last-child vyberte předposlední prvek

Můžete také použít pseudotřídu :nth-last-child, která kombinuje schopnosti pseudotříd :last-child a :nth-child a začít počítat prvky od konce. To znamená, že můžete vybrat prvek počítáním pořadová čísla od konce skupiny, například ve skupině deseti prvků, můžete vybrat druhý prvek od konce:

Prvek 1
Prvek 2
Prvek 3
Prvek 4
Prvek 5
Prvek 6
Prvek 7
Prvek 8
Prvek 9
Prvek 10

#selector_example li:nth-last-child (2) ( font-size: 150 %; font-weight:bold ; barva:zelená; )

Podívejte se na pseudotřídu :nth-child s "