
CSS-псевдокласс :nth-child() позволяет выбирать элементы по их порядковому номеру внутри родителя. Для выбора каждого третьего элемента используется выражение 3n, где n – целое число, начиная с 1. Это значит, что будут выбраны элементы с номерами 3, 6, 9 и так далее.
На практике :nth-child(3n) применяется для списков, таблиц, карточек и других повторяющихся блоков. Например, в ul или ol каждая третья li может получать отдельный фон или границу, чтобы визуально разделить элементы и улучшить восприятие контента.
Комбинация :nth-child(3n) с классами и идентификаторами позволяет точечно изменять стили конкретных секций страницы без создания дополнительных CSS-классов. Использование :not() вместе с 3n помогает исключить нежелательные элементы и настроить выборку более гибко.
При работе с :nth-child(3n) важно помнить, что нумерация начинается с первого дочернего элемента родителя, а не с нуля. Это влияет на результат при наличии скрытых элементов или при динамическом добавлении контента через JavaScript.
Примеры применения включают выделение каждой третьей карточки продукта, каждой третьей строки таблицы или каждой третьей статьи в списке. Такой подход уменьшает количество повторяющихся стилей и упрощает поддержку CSS на больших проектах.
Синтаксис :nth-child(3n) для работы с каждым третьим элементом

Псевдокласс :nth-child() выбирает элементы по их порядковому номеру в пределах родителя. Выражение 3n обозначает каждый третий элемент, начиная с первого совпадения. Например, li:nth-child(3n) применит стиль к 3-й, 6-й, 9-й и следующим элементам списка.
Формат записи: селектор:nth-child(3n) { свойства; }. Он работает с любыми блоками и тегами, включая div, tr, td и li. Это упрощает стилизацию повторяющихся элементов без добавления дополнительных классов.
Использование смещения, например 3n+1 или 3n+2, позволяет изменять стартовую позицию. 3n+1 применяет стиль к 1-му, 4-му, 7-му элементу, а 3n+2 – ко 2-му, 5-му, 8-му и так далее.
При выборе учитываются все дочерние элементы, независимо от их видимости. Элементы, не подходящие под тип селектора, не будут затронуты. Это важно для корректного расчета нумерации при сложной структуре HTML.
Комбинация :nth-child(3n) с классами или идентификаторами позволяет ограничить применение стилей конкретными блоками. Такой подход снижает количество повторяющихся правил CSS и делает код более управляемым на страницах с большим количеством повторяющихся элементов.
Применение к спискам и таблицам: конкретные примеры
Для списков ul и ol псевдокласс :nth-child(3n) позволяет выделять каждую третью li. Например, ul li:nth-child(3n) { background-color: #e0e0e0; } создаёт серую подсветку для 3-го, 6-го, 9-го элемента, улучшая читаемость и визуальное разделение элементов.
В таблицах селектор применяется к строкам tr. Например, table tr:nth-child(3n) { font-weight: bold; } делает каждую третью строку таблицы жирной, что облегчает восприятие данных в больших таблицах с повторяющейся информацией.
Можно комбинировать :nth-child(3n) с конкретными столбцами. Например, table tr td:nth-child(3n) { text-align: center; } центрирует текст в каждом третьем столбце, не затрагивая остальные.
Скрытые элементы учитываются в нумерации, поэтому при динамическом добавлении строк или элементов важно проверять корректность подсветки. В сложных структурах лучше использовать смещение, например 3n+2, чтобы точно задать стартовый элемент.
Использование этих приёмов сокращает необходимость создавать дополнительные CSS-классы для повторяющихся шаблонов, упрощая поддержку кода и ускоряя разработку интерфейсов с повторяющимися блоками.
Комбинирование :nth-child(3n) с классами и идентификаторами

Псевдокласс :nth-child(3n) можно использовать совместно с классами и идентификаторами для точечного изменения стилей. Это позволяет применять стили только к нужной группе элементов, не затрагивая остальные блоки.
Примеры применения:
- .menu li:nth-child(3n) { background-color: #dcdcdc; } – каждая третья ссылка меню получает серый фон.
- #products div:nth-child(3n) { border: 1px solid #ccc; } – каждая третья карточка товара получает рамку.
- .gallery img:nth-child(3n) { opacity: 0.8; } – каждая третья фотография в галерее затемняется.
С помощью классов и идентификаторов можно комбинировать :nth-child(3n) с другими селекторами. Например:
- #news .article:nth-child(3n) { padding: 15px; } – каждая третья статья внутри блока с ID «news» получает дополнительный отступ.
- .features li.feature:nth-child(3n) { color: #ff6600; } – каждая третья функция с классом «feature» окрашивается в оранжевый цвет.
Это сокращает количество повторяющихся CSS-классов и позволяет гибко управлять стилями на страницах с повторяющимися элементами, сохраняя код компактным и поддерживаемым.
Стилизация чередующихся элементов с помощью 3n

Псевдокласс :nth-child(3n) удобен для создания чередующихся стилей в списках, таблицах и сетках. Он позволяет выделять каждый третий элемент, создавая визуальный ритм и облегчая восприятие информации.
Примеры применения:
- ul li:nth-child(3n) { background-color: #f9f9f9; } – каждая третья строка списка подсвечивается светлым фоном.
- table tr:nth-child(3n) { background-color: #e6f2ff; } – каждая третья строка таблицы получает голубой фон, улучшая чтение данных.
- .grid div:nth-child(3n) { border-top: 2px solid #333; } – каждая третья карточка в сетке отделена верхней границей.
С помощью смещения можно изменять стартовую точку чередования. Например, 3n+2 применяет стиль ко второму, пятому, восьмому элементу. Это полезно для создания смещённых паттернов без добавления дополнительных классов.
Комбинация :nth-child(3n) с цветами, границами, отступами или шрифтами позволяет быстро визуально структурировать контент и уменьшить количество ручной работы по назначению стилей каждому элементу.
Игнорирование элементов: :not() вместе с 3n

Псевдокласс :not() позволяет исключать отдельные элементы из выборки, сохраняя логику :nth-child(3n). Это полезно, когда часть элементов не должна участвовать в стилизации, но при этом остаётся в разметке.
Пример для списка: ul li:not(.disabled):nth-child(3n) { background-color: #f2f2f2; }. В этом случае каждая третья строка получает стиль, кроме элементов с классом disabled.
В таблицах приём применяется к строкам или ячейкам. Например: table tr:not(.header):nth-child(3n) { background-color: #eef6ff; }. Заголовочные строки исключаются, а нумерация продолжается с учётом их позиции в DOM.
Важно учитывать, что :not() не меняет порядок подсчёта. Исключённые элементы всё равно участвуют в нумерации, поэтому визуальный результат зависит от структуры HTML. Если требуется изменить стартовую точку, используется смещение 3n+1 или 3n+2.
Связка :not() и :nth-child(3n) подходит для каталогов, меню и таблиц с техническими строками, где часть элементов должна оставаться без оформления, но не может быть удалена из разметки.
Практические ошибки и нюансы при выборе третьего элемента

Частая ошибка при использовании :nth-child(3n) – неверное понимание области подсчёта. Нумерация всегда ведётся среди всех дочерних узлов родителя, а не только элементов нужного типа. Если внутри контейнера есть разные теги, селектор может срабатывать не на тех элементах, которые ожидаются.
Путаница между :nth-child() и :nth-of-type() приводит к некорректной стилизации. Первый учитывает все дочерние элементы, второй – только элементы одного тега. При работе со списками внутри сложной разметки стоит заранее проверить, какой вариант подходит для конкретной структуры.
Скрытые элементы с display: none продолжают участвовать в подсчёте. Это часто вызывает смещение выделения при динамическом показе или скрытии блоков через JavaScript. Для стабильного результата рекомендуется контролировать порядок элементов в DOM, а не полагаться на визуальное отображение.
Добавление новых элементов в начало списка меняет весь порядок срабатывания 3n. В интерфейсах с подгружаемым контентом стоит использовать смещение, например 3n+2, чтобы сохранить ожидаемый шаблон выделения.
Ещё одна проблема связана с вложенными элементами. Если селектор применяется без уточнения родителя, :nth-child(3n) может затронуть элементы на других уровнях вложенности. Указание конкретного контейнера снижает риск побочных эффектов и упрощает контроль над стилями.
Вопрос-ответ:
Почему :nth-child(3n) выбирает не те элементы, которые я ожидаю?
Селектор считает все дочерние элементы внутри родителя, а не только элементы одного типа. Если внутри контейнера есть разные теги, порядок может сместиться. В таких случаях помогает проверка структуры DOM или замена на :nth-of-type(3n), если нужно учитывать только один тег.
Можно ли выбрать каждый третий элемент, начиная не с третьего, а со второго?
Да, для этого используется смещение. Запись :nth-child(3n+2) применяет стиль ко второму, пятому, восьмому элементу и далее. Такой вариант подходит для создания смещённых шаблонов без изменения разметки.
Почему скрытые элементы влияют на работу :nth-child(3n)?
Элементы с display: none остаются в DOM и участвуют в подсчёте позиций. Если требуется другой результат, порядок элементов нужно менять на уровне HTML или использовать отдельные контейнеры для стилизации.
Как ограничить действие :nth-child(3n) только одним блоком страницы?
Нужно явно указать родительский селектор. Например, .catalog li:nth-child(3n) применяет стиль только к элементам списка внутри блока с классом catalog и не затрагивает другие списки на странице.
