В :nth-child
селектора ви позволява да изберете един или повече елементи, основани на техния ред източник, според формула.
/* 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) ( )
Той е дефиниран в спецификациите на CSS Selectors Level 3 като „структурен псевдоклас“, което означава, че се използва за оформяне на съдържание въз основа на връзката му с родителските и братските елементи.
Да предположим, че изграждаме CSS мрежа и искаме да премахнем полето на всеки четвърти модул на мрежата. Ето този HTML:
One Two Three Four Five
Вместо да добавяме клас към всеки четвърти елемент (например .last
), можем да използваме :nth-child
:
.module:nth-child(4n) ( margin-right: 0; )
На :nth-child
селектора се аргумент: това може да бъде едно цяло число, ключови думи even
, odd
или формула. Ако е посочено цяло число, е избран само един елемент, но ключовите думи или формула ще итерират през всички дъщери на родителския елемент и ще изберат съвпадащи елементи - подобно на навигацията в елементи в JavaScript масив. Ключовите думи „четни“ и „нечетни“ са ясни (съответно 2, 4, 6 и т.н. или съответно 1, 3, 5). Формулата се изгражда с помощта на синтаксиса an+b
, където:
- "A" е целочислена стойност
- „N“ е буквалната буква „n“
- „+“ Е оператор и може да бъде „+“ или „-“
- „B“ е цяло число и се изисква, ако във формулата е включен оператор
Важно е да се отбележи, че тази формула е уравнение и итерира през всеки елемент от сестра, определяйки кой ще бъде избран. "N" частта от формулата, ако е включена, представлява набор от нарастващи положителни цели числа (точно като итерация през масив). В горния ни пример избрахме всеки четвърти елемент с формулата 4n
, която работеше, защото всеки път, когато даден елемент беше проверен, „n“ се увеличаваше с един (4 × 0, 4 × 1, 4 × 2, 4 × 3 и т.н.). Ако редът на даден елемент съвпада с резултата от уравнението, той се избира (4, 8, 12 и т.н.). За по-задълбочено обяснение на математиката, моля, прочетете тази статия.
За илюстрация по-нататък, ето няколко примера за валидни :nth-child
селектори:
За щастие не винаги трябва да правите математика сами - има няколко :nth-child
тестера и генератори:
- CSS-Tricks Tester
- Тестерът на Леа Веру
: nth-child (an + b of)
Има малко известен филтър, който може да бъде добавен :nth-child
съгласно спецификацията на CSS селектори: Възможността за избор :nth-child
на подмножество от елементи, използвайки of
формата. Да предположим, че имате списък със смесено съдържание: Някои имат класа .video
, други имат класа .picture
и искате да изберете първите 3 снимки. Можете да го направите с филтъра „на“ по следния начин:
:nth-child(-n+3 of .picture) ( /* Selects the first 3 elements applied not to ALL children but only to those matching .picture */ )
Имайте предвид, че това е различно от добавянето на селектор директно към :nth-child
селектора:
.picture:nth-child(-n+3) ( /* Not the same! This applies to elements matching .picture which _also_ match :nth-child(-n+3) */ )
Това може да стане малко объркващо, така че един пример може да помогне да се илюстрира разликата:
Поддръжката на браузъра за филтъра “на” е много ограничена: Към момента на писането само синтаксис поддържаше Safari. За да проверите състоянието на любимия си браузър, тук има отворени въпроси, свързани с :nth-child(an+b of s)
:
- Firefox: Поддръжка за n-то дете (An + B от sel)
- Chrome: Внедряване: nth-child (an + b of S)
Точки на интерес
:nth-child
итерира през елементи, започвайки от горната част на реда на източника. Единствената разлика между него и:nth-last-child
е, че последният итерира през елементи, започвайки от дъното на изходния ред.- Синтаксисът за избор на първия
n
брой елементи е малко контраинтуитивен. Започвате с-n
плюс положителния брой елементи, които искате да изберете. Например,li:nth-child(-n+3)
ще изберете първите 3li
елемента. - В
:nth-child
селектора е много подобен на:nth-of-type
, но с една критична разлика: тя е по-специфичен. В нашия пример по-горе те биха дали същия резултат, защото ние итерираме само върху.module
елементи, но ако итерираме по по-сложна група от братя и сестри,:nth-child
биха се опитали да съвпаднат с всички братя и сестри, а не само с братя и сестри от същия тип елементи. Това разкрива силата на:nth-child
-it може да избере всеки елемент от братя и сестри в подреждане, не само елементи, които са посочени преди дебелото черво.
Поддръжка на браузър
Chrome | Сафари | Firefox | Опера | IE | Android | iOS |
---|---|---|---|---|---|---|
Всякакви | 3.2+ | Всякакви | 9,5+ | 9+ | Всякакви | Всякакви |
:nth-child
беше въведен в CSS Selectors Module 3, което означава, че старите версии на браузърите не го поддържат. Съвременната поддръжка на браузъра обаче е безупречна и новите псевдоселектори се използват широко в производствените среди. Ако се нуждаете от по-стара поддръжка на браузъра, или polyfill за IE, или използвайте тези селектори по некритични начини - прогресивно подобрение, което се препоръчва.