:nth-of-type() ⚡️ HTML и CSS с примерами кода
Псевдокласс :nth-of-type
используется для добавления стиля к элементам указанного типа на основе нумерации в дереве элементов.
- :active
- :any-link
- :blank
- :checked
- :current()
- :default
- :defined
- :dir()
- :disabled
- :empty
- :enabled
- :first
- :first-child
- :first-of-type
- :focus
- :focus-visible
- :focus-within
- :fullscreen
- :future
- :has()
- :host
- :host()
- :host-context()
- :hover
- :indeterminate
- :in-range
- :invalid
- :is()
- :lang()
- :last-child
- :last-of-type
- :left
- :link
- :local-link
- :not()
- :nth-child()
- :nth-col()
- :nth-last-child()
- :nth-last-col()
- :nth-last-of-type()
- :nth-of-type()
- :only-child
- :only-of-type
- :optional
- :out-of-range
- :past
- :placeholder-shown
- :read-only
- :read-write
- :required
- :right
- :root
- :scope
- :target
- :target-within
- :user-invalid
- :valid
- :visited
- :where()
Синтаксис
/* Выбирает каждый четвёртый элемент <p> среди любой группы соседних элементов. */ p:nth-of-type(4n) { color: lime; }
Значения
odd
- Все нечётные номера элементов.
even
- Все чётные номера элементов.
<число>
- Порядковый номер дочернего элемента относительно своего родителя. Нумерация начинается с 1, это будет первый элемент в списке.
<выражение>
- Задаётся в виде
an±b
, гдеa
иb
— целые числа, аn
— счётчик, который автоматически принимает значение 0, 1, 2…
Если a
равно нулю, то оно не пишется и запись сокращается до b
. Если b
равно нулю, то оно также не указывается и выражение записывается в форме an
. a
и b
могут быть отрицательными числами, в этом случае знак плюс меняется на минус, например: 5n-1
.
За счёт использования отрицательных значений
и b
некоторые результаты могут также получиться отрицательными или равными нулю. Однако на элементы оказывают влияние только положительные значения из-за того, что нумерация элементов начинается с 1
.
В табл. 1 приведены некоторые возможные выражения и ключевые слова, а также указано, какие номера элементов будут задействованы.
Табл. 1. Результат для различных значений псевдокласса
Значение | Номера элементов | Описание |
---|---|---|
1 | 1 | Первый элемент, является синонимом псевдокласса :first-of-type . |
5 | 5 | Пятый элемент. |
2n | 2, 4, 6, 8, 10,… | Все чётные элементы, аналог значения even . |
2n+1 | 1, 3, 5, 7, 9,… | Все нечётные элементы, аналог значения odd . |
3n | 3, 6, 9, 12, 15,… | Каждый третий элемент. |
3n+2 | 2, 5, 8, 11, 14,… | Каждый третий элемент, начиная со второго. |
n+4 | 4, 5, 6, 7, 8,… | Все элементы, кроме первых трёх. |
-n+3 | 3, 2, 1 | Первые три элемента. |
5n-2 | 3, 8, 13, 18, 23,… | — |
even | 2, 4, 6, 8, 10,… | Все чётные элементы. |
odd | 1, 3, 5, 7, 9,… | Все нечётные элементы. |
Допустимо комбинировать два псевдокласса :nth-of-type
для выбора диапазона элементов. Здесь будут выбраны все элементы со второго по пятый.
:nth-of-type(n + 2):nth-of-type(-n + 5) { /* … */ }
Спецификации
- Selectors Level 4
- Selectors Level 3
Примеры
Пример 1
HTMLCSSРезультат
<div> <div>Этот элемент не учитывается.</div> <p>Первый параграф.</p> <p>Второй параграф.</p> <div>Этот элемент не учитывается. </div> <p>Третий параграф.</p> <p>Четвёртый параграф.</p> </div>
/* Нечётные параграфы */ p:nth-of-type(2n + 1) { color: red; } /* Чётные параграфы */ p:nth-of-type(2n) { color: blue; } /* Первый параграф */ p:nth-of-type(1) { font-weight: bold; }
Пример 2
<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title>nth-of-type</title> <style> img:nth-of-type(2n + 1) { float: left; } img:nth-of-type(2n) { float: right; } </style> </head> <body> <p> <img src="image/left-knight.gif" alt="" /> <img src="image/right-knight.gif" alt="" /> </p> <h2>Исторический турнир</h2> </body> </html>
В данном примере нечётные картинки выравниваются по левому краю окна, а чётные картинки по правому.
См.
также:nth-child
:nth-last-of-type
Ссылки
- Псевдо-класс
:nth-of-type()
MDN (рус.)
Псевдокласс :nth-child | WebReference
Псевдокласс :nth-child используется для добавления стиля к элементам на основе нумерации в дереве элементов.
Синтаксис
Селектор:nth-child(odd | even | <число> | <выражение>) {...}Синтаксис
Описание | Пример | |
---|---|---|
<тип> | Указывает тип значения. | <размер> |
A && B | Значения должны выводиться в указанном порядке. | <размер> && <цвет> |
A | B | Указывает, что надо выбрать только одно значение из предложенных (A или B). | normal | small-caps |
A || B | Каждое значение может использоваться самостоятельно или совместно с другими в произвольном порядке. | width || count |
[ ] | Группирует значения. | [ crop || cross ] |
* | Повторять ноль или больше раз. | [,<время>]* |
+ | Повторять один или больше раз. | <число>+ |
? | Указанный тип, слово или группа не является обязательным. | inset? |
{A, B} | Повторять не менее A, но не более B раз. | <радиус>{1,4} |
# | Повторять один или больше раз через запятую. | <время># |
Значения
- odd
- Все нечётные номера элементов.
- even
- Все чётные номера элементов.
- <число>
- Порядковый номер дочернего элемента относительно своего родителя. Нумерация начинается с 1, это будет первый элемент в списке.
- <выражение>
- Задаётся в виде an±b, где a и b — целые числа, а n — счётчик, который автоматически принимает значение 0, 1, 2…
Если a равно нулю, то оно не пишется и запись сокращается до b. Если b равно нулю, то оно также не указывается и выражение записывается в форме an. a и b могут быть отрицательными числами, в этом случае знак плюс меняется на минус, например: 5n-1.
За счёт использования отрицательных значений a и b некоторые результаты могут также получиться отрицательными или равными нулю. Однако на элементы оказывают влияние только положительные значения из-за того, что нумерация элементов начинается с 1.
В табл. 1 приведены некоторые возможные выражения и ключевые слова, а также указано, какие номера элементов будут задействованы.
Значение | Номера элементов | Описание |
---|---|---|
1 | 1 | Первый элемент, является синонимом псевдокласса :first-child. |
5 | 5 | Пятый элемент. |
2n | 2, 4, 6, 8, 10,… | Все чётные элементы, аналог значения even. |
2n+1 | 1, 3, 5, 7, 9,… | Все нечётные элементы, аналог значения odd. |
3n | 3, 6, 9, 12, 15,… | Каждый третий элемент. |
3n+2 | 2, 5, 8, 11, 14,… | Каждый третий элемент, начиная со второго. |
n+4 | 4, 5, 6, 7, 8,… | Все элементы, кроме первых трёх. |
-n+3 | 3, 2, 1 | Первые три элемента. |
5n-2 | 3, 8, 13, 18, 23,… | — |
even | 2, 4, 6, 8, 10,… | Все чётные элементы. |
odd | 1, 3, 5, 7, 9,… | Все нечётные элементы. |
Допустимо комбинировать два псевдокласса :nth-child для выбора диапазона элементов. Здесь будут выбраны все элементы со второго по пятый.
:nth-child(n+2):nth-child(-n+5) { … }
Пример
<!DOCTYPE html> <html> <head> <meta charset=»utf-8″> <title>nth-child</title> <style> table { width: 100%; /* Ширина таблицы */ border-spacing: 0; /* Расстояние между ячейками */ } tr:nth-child(2n) { background: #f0f0f0; /* Цвет фона */ } tr:nth-child(1) { background: #666; /* Цвет фона */ color: #fff; /* Цвет текста */ } </style> </head> <body> <table border=»1″> <tr> <td> </td><td>2134</td><td>2135</td> <td>2136</td><td>2137</td><td>2138</td> </tr> <tr> <td>Нефть</td><td>16</td><td>34</td> <td>62</td><td>74</td><td>57</td> </tr> <tr> <td>Золото</td><td>4</td><td>69</td> <td>72</td><td>56</td><td>47</td> </tr> <tr> <td>Дерево</td><td>7</td><td>73</td> <td>79</td><td>34</td><td>86</td> </tr> <tr> <td>Камни</td><td>23</td><td>34</td> <td>88</td><td>53</td><td>103</td> </tr> </table> </body> </html>В данном примере псевдокласс :nth-child используется для изменения стиля первой строки таблицы, а также для выделения цветом всех чётных строк (рис. 1).
Рис. 1. Применение псевдокласса :nth-child к строкам таблицы
Спецификация
Спецификация | Статус |
---|---|
Selectors Level 4 | Рабочий проект |
Selectors Level 3 | Рекомендация |
Каждая спецификация проходит несколько стадий одобрения.
- Recommendation (Рекомендация) — спецификация одобрена W3C и рекомендована как стандарт.
- Candidate Recommendation (Возможная рекомендация) — группа, отвечающая за стандарт, удовлетворена, как он соответствует своим целям, но требуется помощь сообщества разработчиков по реализации стандарта.
- Proposed Recommendation (Предлагаемая рекомендация) — на этом этапе документ представлен на рассмотрение Консультативного совета W3C для окончательного утверждения.
- Working Draft (Рабочий проект) — более зрелая версия черновика после обсуждения и внесения поправок для рассмотрения сообществом.
- Editor’s draft (Редакторский черновик) — черновая версия стандарта после внесения правок редакторами проекта.
- Draft (Черновик спецификации) — первая черновая версия стандарта.
Браузеры
9 | 12 | 1 | 9.5 | 3.1 | 3.5 |
2.1 | 1 | 9.5 | 3.1 |
В таблице браузеров применяются следующие обозначения.
- — элемент полностью поддерживается браузером;
- — элемент браузером не воспринимается и игнорируется;
- — при работе возможно появление различных ошибок, либо элемент поддерживается с оговорками.
Число указывает версию браузреа, начиная с которой элемент поддерживается.
Псевдоклассы
См.
также- :nth-child()
- :nth-of-type()
- Нумерованные списки
- Псевдокласс :nth-last-child
- Псевдокласс :nth-last-of-type
- Псевдокласс :nth-of-type
Рецепты
- Как сделать нумерацию русскими буквами?
Практика
- Зебра в таблице
:n-й ребенок | CSS-трюки — CSS-трюки
DigitalOcean предоставляет облачные продукты для каждого этапа вашего путешествия. Начните с бесплатного кредита в размере 200 долларов США!
Селектор :nth-child
позволяет выбрать один или несколько элементов на основе их исходного порядка в соответствии с формулой.
/* Выбор первого элемента списка */ li: nth-ребенок (1) { } /* Выберите 5-й элемент списка */ li: nth-ребенок (5) { } /* Выбираем все остальные элементы списка, начиная с первого */ li: nth-ребенок (нечетный) { } /* Выбираем каждый третий элемент списка, начиная с первого */ li: n-й ребенок (3n - 2) { } /* Выбрать каждый 3-й элемент списка, начиная со 2-го */ li: n-й ребенок (3n - 1) { } /* Выбрать каждый 3-й дочерний элемент, если он имеет класс "el" */ . el:nth-child(3n) { }
Он определен в спецификации CSS Selectors Level 3 как «структурный псевдокласс», что означает, что он используется для стилизации контента на основе его отношений с родительскими и одноуровневыми элементами.
Предположим, мы создаем сетку CSS и хотим удалить поля на каждом четвертом модуле сетки. Вот этот HTML:
Один Два Три Четыре Пять раздел>
Вместо добавления класса к каждому четвертому элементу (например, .last
), мы можем использовать :nth-child
:
.module:nth-child(4n) { поле справа: 0; }
Селектор :nth-child
принимает аргумент: это может быть одно целое число, ключевые слова четные
, нечетные
или формула. Если указано целое число, выбирается только один элемент, но ключевые слова или формула будут перебирать все дочерние элементы родительского элемента и выбирать соответствующие элементы — аналогично навигации по элементам в массиве 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
- Тестер Леа Веру
:nth-child(an + b of
Существует малоизвестный фильтр, который можно добавить к :nth-child
в соответствии со спецификацией CSS Selectors: Возможность выбора :nth-child
подмножества элементов, используя формат из
. Предположим, у вас есть список смешанного контента: у некоторых есть класс .video
, у некоторых есть класс .picture
, и вы хотите выбрать первые 3 изображения. Вы можете сделать это с помощью фильтра «из» следующим образом:
:nth-child(-n+3 of .picture) { /* Выбирает первые 3 элемента применяется не ко ВСЕМ детям, а только тем, кто соответствует . picture */ }
Обратите внимание, что это отличается от добавления селектора непосредственно к селектору :nth-child
:
.picture:nth-child(-n+3) { /* Не то же самое! Это относится к элементам, соответствующим .picture которые _also_ соответствуют :nth-child(-n+3) */ }
Это может немного запутать, поэтому пример может помочь проиллюстрировать разницу:
Браузер поддерживает фильтр «из» очень ограниченно: на момент написания этой статьи только Safari поддерживал синтаксис. Чтобы проверить статус вашего любимого браузера, вот открытые проблемы, связанные с :nth-child(an+b of s)
:
- Firefox: Поддержка nth-child(An+B of sel)
- Chrome: Реализовать :nth-child(an+b of S)
Достопримечательности
-
:nth-child
перебирает элементы, начиная с верхней части исходного порядка. Единственная разница между ним и:nth-last-child
заключается в том, что последний перебирает элементы , начиная с нижней части исходного порядка . - Синтаксис для выбора первого
n
количества элементов несколько нелогичен. Вы начинаете с-n
плюс положительное количество элементов, которые вы хотите выбрать. Например,li:nth-child(-n+3)
выберет первые 3 элементаli
. - Селектор
:nth-child
очень похож на:nth-of-type
, но с одним важным отличием : он менее специфичен. В нашем примере выше они дадут тот же результат, потому что мы итерируем только.module
элементов, но если бы мы итерировали более сложную группу братьев и сестер,:nth-child
попытался бы сопоставить все элементы того же уровня, а не только братья и сестры одного и того же типа элемента. Это раскрывает силу:nth-child
— может выбрать любой родственный элемент в аранжировке, а не только элементы, указанные перед двоеточием .
- NTH-Last-Cill -child Рецепты
- Mozilla Docs
- Статья QuirksMode
- Статья Sitepoint
Поддержка браузера
Хром | Сафари | Firefox | Опера | ИЭ | Андроид | iOS |
---|---|---|---|---|---|---|
Любой | 3. 2+ | Любой | 9,5+ | 9+ | Любой | Любой |
:nth-child
был представлен в модуле селекторов CSS 3, что означает, что старые версии браузеров не поддерживают его. Однако поддержка современных браузеров безупречна, а новые псевдоселекторы широко используются в производственных средах. Если вам требуется поддержка старых браузеров, либо полифил для IE, либо используйте эти селекторы некритичными способами, а-ля прогрессивное улучшение, что рекомендуется.
:n-й тип | CSS-трюки — CSS-трюки
DigitalOcean предоставляет облачные продукты для каждого этапа вашего путешествия. Начните с бесплатного кредита в размере 200 долларов США!
Селектор :nth-of-type
позволяет выбрать один или несколько элементов на основе их исходного порядка в соответствии с формулой. Он определен в спецификации CSS Selectors Level 3 как «структурный псевдокласс», что означает, что он используется для стилизации контента на основе его отношений с родительскими и одноуровневыми элементами.
Предположим, у нас есть неупорядоченный список, и мы хотим «зебру» чередовать элементы списка:
- Первый элемент
- Второй элемент
- Третий элемент
- Четвертый пункт
- Пятый пункт
Вместо добавления классов к каждому элементу списка (например, .even
и .odd
) мы можем использовать :nth-of-type
:
li { фон: сланцево-серый; } /* выбор чередующихся элементов, начиная со второго элемента */ li: n-го типа (2n) { фон: светло-серый; }
Как видите,
:nth-of-type
принимает аргумент: это может быть одно целое число, ключевые слова «четный» или «нечетный» или формула, как показано выше. Если указано целое число, выбирается только один элемент, но ключевые слова или формула будут перебирать все дочерние элементы родительского элемента и выбирать соответствующие элементы — аналогично навигации по элементам в массиве в JavaScript. Ключевые слова «четный» и «нечетный» просты, но формула построена с использованием синтаксиса an+b
, где:
- «a» — целое число
- «n» — буквенная буква «n»
- «+» — оператор, может быть как «+», так и «-»
- «b» является целым числом и является обязательным, если в формулу включен оператор.
Важно отметить, что эта формула представляет собой уравнение и выполняет итерации по каждому элементу того же уровня, определяя, какой из них будет выбран. Часть «n» формулы, если она присутствует, представляет собой набор возрастающих положительных целых чисел (точно так же, как итерация по массиву). В нашем примере выше мы выбрали каждый второй элемент по формуле 2n
, что сработало, потому что каждый раз, когда элемент проверялся, «n» увеличивалось на единицу (2×0, 2×1, 2×2, 2×3 и т. д.). Если порядок элемента соответствует результату уравнения, он выбирается (2, 4, 6 и т. д.). Для более подробного объяснения задействованной математики, пожалуйста, прочитайте эту статью.
Чтобы проиллюстрировать это далее, вот несколько примеров допустимых селекторов :nth-of-type
:
К счастью, вам не всегда нужно делать математику самостоятельно — существует несколько :nth-of-type
тестеров и генераторов:
- Тестер CSS-трюков
- Тестер Леа Веру
Точки интереса
-
:nth-of-type
перебирает исходный порядок элементов, начиная с порядка. Единственная разница между ним и:nth-last-of-type
заключается в том, что последний перебирает элементы , начиная с нижней части исходного порядка . - Селектор
:nth-of-type
очень похож на:nth-child
но с одним критическим отличием: конкретнее. В нашем примере выше они дали бы тот же результат, потому что мы перебираем толькоli
элементов, но если бы мы перебирали более сложную группу братьев и сестер,:nth-child
попытался бы сопоставить все братья и сестры, а не только братья и сестры. того же типа элемента. Это раскрывает силу:nth-of-type
— он нацелен на определенный тип элемента в расположении по отношению к подобным братьям и сестрам, а не ко всем братьям и сестрам .
- nth-last-of-type
- nth-child
- nth-last-child
- first-of-type
- last-of-type
Other Resources
- Mozilla Docs
- QuirksMode статья
- Sitepoint статья
Поддержка браузера
Данные о поддержке функции mdn-css__selectors__nth-of-type в основных браузерах.
:nth-of-type
был представлен в модуле CSS Selectors 3, что означает, что старые версии браузеров не поддерживают его. Однако поддержка современных браузеров безупречна, а новые псевдоселекторы широко используются в производственных средах. Если вам требуется поддержка старых браузеров, либо полифил для IE, либо используйте эти селекторы некритичными способами, а-ля прогрессивное улучшение, что рекомендуется.