Med :nth-child
väljaren kan du välja ett eller flera element baserat på deras källordning, enligt en formel.
/* 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) ( )
Det definieras i CSS Selectors nivå 3-specifikationen som en "strukturell pseudoklass", vilket betyder att den används för att utforma innehåll baserat på dess förhållande till föräldra- och syskonelement.
Antag att vi bygger ett CSS-rutnät och vill ta bort marginalen på var fjärde nätmodul. Här är den HTML:
One Two Three Four Five
I stället för att lägga till en klass till vart fjärde objekt (t.ex. .last
) kan vi använda :nth-child
:
.module:nth-child(4n) ( margin-right: 0; )
Den :nth-child
väljare tar ett argument: detta kan vara ett enda heltal, nyckelord even
, odd
eller en formel. Om ett heltal specificeras väljs endast ett element - men nyckelorden eller en formel kommer att upprepas genom alla underordnade element och välja matchande element - liknande navigeringsobjekt i en JavaScript-array. Nyckelorden "jämn" och "udda" är enkla (2, 4, 6, etc. eller 1, 3, 5). Formeln är konstruerad med syntax an+b
, där:
- “A” är ett heltal
- "N" är bokstavsbokstaven "n"
- "+" Är en operatör och kan vara antingen "+" eller "-"
- “B” är ett heltal och krävs om en operatör ingår i formeln
Det är viktigt att notera att denna formel är en ekvation, och den går igenom varje syskonelement och bestämmer vilken som ska väljas. "N" -delen av formeln, om den ingår, representerar en uppsättning av ökande positiva heltal (precis som att det går igenom en matris). I vårt ovanstående exempel valde vi vart fjärde element med formeln 4n
, som fungerade eftersom varje gång ett element kontrollerades ökade “n” med ett (4 × 0, 4 × 1, 4 × 2, 4 × 3, etc). Om ett elements ordning matchar resultatet av ekvationen, blir den vald (4, 8, 12, etc). För en mer fördjupad förklaring av matematiken, läs den här artikeln.
För att illustrera ytterligare, här är några exempel på giltiga :nth-child
väljare:
Lyckligtvis behöver du inte alltid göra matte själv - det finns flera :nth-child
testare och generatorer där ute:
- CSS-Tricks Tester
- Lea Verous testare
: nth-child (an + b of)
Det finns ett lite känt filter som kan läggas till :nth-child
enligt CSS Selectors specifikation: Möjligheten att välja :nth-child
en delmängd av element, med hjälp av of
formatet. Antag att du har en lista med blandat innehåll: Vissa har klassen .video
, andra har klassen .picture
och du vill välja de tre första bilderna. Du kan göra det med "of" -filtret så:
:nth-child(-n+3 of .picture) ( /* Selects the first 3 elements applied not to ALL children but only to those matching .picture */ )
Observera att detta skiljer sig från att lägga till en väljare direkt till :nth-child
väljaren:
.picture:nth-child(-n+3) ( /* Not the same! This applies to elements matching .picture which _also_ match :nth-child(-n+3) */ )
Detta kan bli lite förvirrande, så ett exempel kan hjälpa till att illustrera skillnaden:
Webbläsarstöd för "of" -filtret är mycket begränsat: I skrivande stund har endast Safari stöd för syntaxen. För att kontrollera status för din favoritwebbläsare, här är öppna frågor relaterade till :nth-child(an+b of s)
:
- Firefox: Stöd för nth-child (An + B of sel)
- Chrome: Redskap: nth-child (an + b of S)
Intressanta platser
:nth-child
itererar genom element som börjar från toppen av källordningen. Den enda skillnaden mellan den och:nth-last-child
är att den senare itererar genom element som börjar från botten av källordningen.- Syntaxen för att välja det första
n
antalet element är lite kontraintuitivt. Du börjar med-n
plus det positiva antalet element du vill välja. Till exempelli:nth-child(-n+3)
kommer att välja de första 3li
elementen. - Den
:nth-child
väljare är mycket likt:nth-of-type
, men med en viktig skillnad: det är mindre specifik. I vårt exempel ovan skulle de producera samma resultat eftersom vi itererar endast över.module
element, men om vi itererade över en mer komplex grupp av syskon:nth-child
skulle vi försöka matcha alla syskon, inte bara syskon av samma elementtyp. Detta avslöjar kraften i:nth-child
-it kan välja vilket syskonelement som helst i ett arrangemang, inte bara element som anges före kolon.
Webbläsarstöd
Krom | Safari | Firefox | Opera | IE | Android | iOS |
---|---|---|---|---|---|---|
Några | 3.2+ | Några | 9,5+ | 9+ | Några | Några |
:nth-child
introducerades i CSS Selectors Module 3, vilket innebär att gamla versioner av webbläsare inte stöder det. Modernt webbläsarsupport är dock oklanderligt och de nya pseudoväljarna används ofta i produktionsmiljöer. Om du behöver äldre webbläsarsupport, antingen polyfill för IE, eller använd dessa väljare på icke-kritiska sätt på en progressiv förbättring, vilket rekommenderas.