A :nth-child
választó lehetővé teszi egy vagy több elem kiválasztását a forrás sorrendje alapján, egy képlet alapján.
/* 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) ( )
A CSS Selectors 3. szintű specifikációja „strukturális álosztály” -ként van meghatározva, vagyis a tartalom stílusához használják a szülő és a testvér elemekkel való kapcsolata alapján.
Tegyük fel, hogy CSS-hálózatot építünk, és szeretnénk eltávolítani a margót minden negyedik rácsmodulról. Itt van ez a HTML:
One Two Three Four Five
Ahelyett, hogy osztályt adnánk minden negyedik elemhez (pl. .last
), Használhatjuk :nth-child
:
.module:nth-child(4n) ( margin-right: 0; )
A :nth-child
szelektor vesz egy érv: ez lehet egyetlen egész szám, a kulcsszavakat even
, odd
vagy egy általános képletű. Ha egész szám van megadva, csak egy elem van kijelölve, de a kulcsszavak vagy a képlet végigvezetik a szülőelem összes gyermekét, és kiválasztanak egyező elemeket - hasonlóan a JavaScript tömb elemeinek navigálásához. A „páros” és a „páratlan” kulcsszavak egyértelműek (2, 4, 6 stb. Vagy 1, 3, 5). A képlet a szintaxis felhasználásával készül an+b
, ahol:
- Az „a” egész szám
- „N” a szó szerinti „n” betű
- A „+” operátor, és lehet „+” vagy „-”
- A „b” egész szám, és akkor szükséges, ha egy operátor szerepel a képletben
Fontos megjegyezni, hogy ez a képlet egy egyenlet, és az egyes testvérelemeken keresztül ismétlődik, meghatározva, hogy melyiket választják ki. A képlet „n” része, ha benne van, növekvő pozitív egészek halmazát jelenti (akárcsak egy tömbön keresztüli iteráció). A fenti példánkban minden negyedik elemet kiválasztottuk a képlettel 4n
, ami azért működött, mert minden egyes elem ellenőrzésénél az „n” eggyel nőtt (4 × 0, 4 × 1, 4 × 2, 4 × 3 stb.). Ha egy elem sorrendje megegyezik az egyenlet eredményével, akkor kiválasztásra kerül (4, 8, 12 stb.). Az érintett matematika részletesebb magyarázatához olvassa el ezt a cikket.
A további szemléltetés érdekében íme néhány példa az érvényes :nth-child
választókról:
Szerencsére nem mindig kell magának :nth-child
matekoznia - több tesztelő és generátor is van ott:
- CSS-trükkök tesztelője
- Lea Verou tesztelője
: n-dik gyermek (an + b)
Van egy kevéssé ismert szűrő, amelyhez hozzá lehet adni :nth-child
a CSS Selectors specifikációt: Lehetőség :nth-child
az elemek egy részhalmazának kiválasztására a of
formátum használatával. Tegyük fel, hogy van vegyes tartalmú listája: Van, akinek az osztálya van .video
, van, akinek az osztálya .picture
, és ki szeretné választani az első 3 képet. Ezt megteheti a „of” szűrővel, így:
:nth-child(-n+3 of .picture) ( /* Selects the first 3 elements applied not to ALL children but only to those matching .picture */ )
Ne feledje, hogy ez különbözik attól, hogy egy választót közvetlenül a :nth-child
választóhoz fűz:
.picture:nth-child(-n+3) ( /* Not the same! This applies to elements matching .picture which _also_ match :nth-child(-n+3) */ )
Ez kissé zavaros lehet, így egy példa segíthet szemléltetni a különbséget:
A „of” szűrő böngészőtámogatása nagyon korlátozott: Az írás kezdetén csak a Safari támogatta a szintaxist. Kedvenc böngészőjének állapotának ellenőrzéséhez íme az alábbiakkal kapcsolatos nyitott kérdések :nth-child(an+b of s)
:
- Firefox: Az n-edik gyermek támogatása (a + B + sel)
- Chrome: Megvalósítás: n -edik gyermek (S + b + S)
Látványosság
:nth-child
a forrásrend tetejétől kezdődő elemeken keresztül iterál. Az egyetlen különbség közte és:nth-last-child
az, hogy az utóbbi a forrásrend aljától kezdődő elemeken keresztül iterál.- Az első
n
számú elem kiválasztásának szintaxisa kissé ellentmondásos. Először-n
plusz a kiválasztani kívánt elemek pozitív számával. Példáulli:nth-child(-n+3)
kiválasztja az első 3li
elemet. - A
:nth-child
választó nagyon hasonló,:nth-of-type
de egy kritikus különbséggel: kevésbé specifikus. A fenti példánkban ugyanazt az eredményt produkálnák, mert csak.module
elemeket ismételünk , de ha egy összetettebb testvércsoporton keresztül ismételnénk,:nth-child
akkor megpróbálnánk az összes testvért illeszteni, nem csak az azonos elemtípusú testvéreket. Ez feltárja annak erejét,:nth-child
hogy bármely testvér elemet kiválaszthat egy elrendezésben, nem csak a kettőspont előtt megadott elemeket.
Böngésző támogatás
Króm | Szafari | Firefox | Opera | AZAZ | Android | iOS |
---|---|---|---|---|---|---|
Bármi | 3.2+ | Bármi | 9.5+ | 9+ | Bármi | Bármi |
:nth-child
a CSS Selectors 3. moduljában vezették be, ami azt jelenti, hogy a böngészők régi verziói nem támogatják. A modern böngészőtámogatás azonban kifogástalan, és az új álválasztókat széles körben használják a gyártási környezetekben. Ha régebbi böngészőtámogatásra van szüksége, vagy töltse ki az IE-t, vagy használja ezeket a választókat nem kritikus módon, fokozatosan továbbfejlesztve, ami ajánlott.