Nth child четные: :nth-child() — Web technology for developers – Псевдоклассы CSS: nth-child и nth-of-type

seodon.ru | CSS справочник — :nth-child

Опубликовано: 18.08.2010 Последняя правка: 10.12.2015

Псевдокласс CSS :nth-child позволяет применить стили (CSS) к выбранным дочерним элементам другого (родительского) элемента, основываясь на порядке появления их в HTML-коде страницы (дереве документа). Отсчет осуществляется от первого дочернего элемента к последнему с учетом всех дочерних элементов, а не только тех, которые указаны перед псевдоклассом :nth-child. Этим данный псевдокласс отличается от :nth-of-type.

Элемент считается родительским для других (дочерних) элементов, только когда они находятся внутри него на первом уровне вложенности. При этом все элементы, которые находятся на любом уровне вложенности (в том числе и на первом) называются потомками данного элемента.

Тип псевдокласса

Назначение: псевдоклассы.

Применяется: ко всем элементам.

Значения

Значением псевдокласса :nth-child является указание в скобках ключевого слова, числа или арифметического выражения определяющего выборку дочерних элементов.

  • even — стили будут применены к каждому четному дочернему элементу (2,4,6,8…).
  • odd — применение стилей к каждому нечетному дочернему элементу (1,3,5,7…).
  • Число — любое положительное число, указывающее номер элемента , где единица (1) соответствует первому дочернему элементу. Кстати, :nth-child(1) то же самое, что и :first-child.
  • Выражение — арифметическое выражение с общим видом an+b или an-b, где a и b положительные, отрицательные числа или ноль, а n — множитель, принимающий значения 0,1,2,3,4… Например, 2n+3 даст последовательность 3,5,7,9… выбранных дочерних элементов. Если b равно нулю, то его можно не указывать, например 2n или 7n. Если a равно нулю, то значение соответствует числу указанному в b.

Если в результате вычисления последовательности некоторые числа окажутся отрицательными или равными нулю, то браузеры их проигнорируют. Например, 2n-4 даст -4,-2,0,2,4,6…, но будут использованы только 2,4,6…

Синтаксис

селектор:nth-child(число | выражение | even | odd) {  }

Пример CSS: использование :nth-child

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
 <head>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  <title>seodon.ru - CSS псевдокласс :nth-child</title>
  <style type="text/css">
   p { margin: 0 } /* убираем внешние поля у параграфов */
   div:nth-child(odd) {
    color: red; /* цвет текста нечетных дочерних DIV */
   }
  </style>
 </head>
 <body>
  <div>1 блок DIV</div>
  <div>2 блок DIV</div>
  <div>3 блок DIV</div>
  <p>1 параграф</p>
  <div>4 блок DIV</div>
  <div>5 блок DIV</div>
  <p>2 параграф</p>
  <p>3 параграф</p>
  <div>6 блок DIV</div>
 </body>
</html>

Результат примера

Результат. Использование псевдокласса CSS :nth-child.

Обратите внимание, что в примере отсчет ведется с учетом всех дочерних элементов тега <BODY> и стили применяются только к тем <DIV>, которые являются нечетными в общем списке.

Версии CSS

Версия:CSS 1CSS 2CSS 2.1CSS 3
Поддержка:НетНетНетДа

Браузеры

Браузер:Internet ExplorerGoogle ChromeMozilla FirefoxOperaSafari
Версия:До 9.09.0 и выше2.0 и выше2.0 и 3.03.6 и выше9.29.6 и выше3.1 и выше
Поддержка:НетДаДаНетДаНетДаДа

как использовать CSS селектор nth-child

CSS от А до Я: как использовать CSS селектор nth-child

От автора: приветствую вас в нашей серии уроков CSS от А до Я! В этой серии я расскажу вам про CSS значения и свойства, начинающиеся с различных букв алфавита. Иногда обучающего ролика бывает недостаточно, и в этой статье я дам вам пару быстрых советов по работе с псевдоклассом nth-child.

N значит nth-child

В CSS есть множество мощных селекторов, с помощью которых можно находить элементы на странице и применять к ним стили.
Из-за гибкости выражения для нахождения элементов по шаблону (an+b) псевдокласс nth-child, возможно, является самым мощным. Более подробно данный псевдокласс был разобран в видеоуроке. В этом уроке мы узнаем, когда лучше использовать nth-child, а когда лучше обойтись обычным классом.

Когда нужно использовать nth-child?

Этот вопрос мне очень часто задают студенты. К сожалению, это зависит от ситуации. Это первое, что необходимо учесть. Но я постараюсь дать вам пару базовых критериев.

Во-первых, все селекторы типа nth-child поддерживаются только в IE9 и выше (исключение :first-child). То есть первым делом необходимо определиться с диапазоном браузеров, с которыми вы будете работать. Если вам придется работать с IE8, вы можете использовать обычные классы или :first-child.

Совет 1: если вы поддерживаете IE8, используйте :first-child

Представьте, что у вас есть горизонтальный маркированный список со ссылками меню. По дизайну справа от каждой ссылки должна быть рамка, но кроме последней ссылки.

CSS от А до Я: как использовать CSS селектор nth-child

Практический курс по верстке адаптивного сайта с нуля!

Изучите курс и узнайте, как верстать современные сайты на HTML5 и CSS3

Узнать подробнее

Не нужно добавлять рамку справа и затем удалять ее на последнем элементе. Лучше добавьте рамку слева и удалите ее у первого элемента.

.site-nav li { border-left: 2px solid grey; } .site-nav li:first-child { border: 0; }

.site-nav li {

  border-left: 2px solid grey;

}

.site-nav li:first-child {

  border: 0;

}

Так же можно поступить и для верхних и нижних рамок. Если же вам посчастливилось не поддерживать IE8, читайте дальше…

Совет 2: используйте вместо классов :first-child и :last-child

Если вы создаете или используете готовую сетку, и вам нужно сделать что-то с первой и последней ячейками в ряду, воспользуйтесь псевдоклассами :first-child и :last-child вместо классов типа .first и .last в HTML.

Так ваш HTML код будет выглядеть чище, и вам не придется слишком много думать во время разработки макета. Иногда макеты бывают очень сложными. Чем меньше вам нужно думать над ним, тем лучше.

Совет 3: используйте nth-child для альтернативных стилей

Классический пример альтернативных стилей – разный фон для четных и нечетных строк в таблице. Еще один пример – обтекание четных и нечетных блоков контента по левому и правому краю на странице или в контейнере (нить комментариев или диалог).

CSS от А до Я: как использовать CSS селектор nth-child

Практический курс по верстке адаптивного сайта с нуля!

Изучите курс и узнайте, как верстать современные сайты на HTML5 и CSS3

Узнать подробнее

В таких случаях я использую :nth-child(odd) и :nth-child(even). Чтобы не засорять код, пропишите первое состояние без nth-child, после чего уже используйте nth-child с большей специфичностью для альтернативных стилей.

/* вот так */ .data-table tr { background: white; } .data-table tr:nth-child(even) { background: lightgrey; } /* а не так */ .data-table tr:nth-child(odd) { background: white; } .data-table tr:nth-child(even) { background: lightgrey; }

/* вот так */

.data-table tr {

  background: white;

}

.data-table tr:nth-child(even) {

  background: lightgrey;

}

 

/* а не так */

.data-table tr:nth-child(odd) {

  background: white;

}

.data-table tr:nth-child(even) {

  background: lightgrey;

}

Совет 4: избегайте странных и сложных выражений с nth-child

Для более сложных выборок на странице я предпочитаю прописывать классы напрямую в HTML, а не работать с запутанными выражениями nth-child.

Выражения типа li:nth-child(-n+3) или li:nth-child(5n+1):not(nth-child(3n-1)) слишком сложны для понимания. Понятия не имею, что они значат, но они работают!

К сожалению, в некоторых сложных дизайнах без таких выражений не обойтись. Но представьте, что вы вернетесь к коду через пару месяцев и попытаетесь понять, что вы хотели сделать. Даже у опытных экспертов по CSS на это уйдет довольно много времени!

Совет 5: используйте nth-child, когда не можете контролировать HTML

Может прозвучать странно. И действительно, мы, как разработчики и дизайнеры, должны контролировать HTML. Это наша главная задача. Но тут я говорю о системах управления контентом.

При создании шаблона для сайта на CMS у вас будет возможность контролировать HTML структуру и создавать классы и атрибуты. Однако иногда в ваших шаблонах будут такие места, куда будет вставляться контент из текстовых полей или областей из самой CMS. Классический пример – WP the_content – один большой кусок HTML, который вы либо плохо контролируете, либо не контролируете вообще.

В этой ситуации вам помогут :first-child, :last-child и :nth-child. Вот и все, 5 советов по тому, как использовать или не использовать самые мощные и гибкие CSS селекторы.

Автор: Guy Routledge

Источник: https://www.sitepoint.com/

Редакция: Команда webformyself.

CSS от А до Я: как использовать CSS селектор nth-child

Практический курс по верстке адаптивного сайта с нуля!

Изучите курс и узнайте, как верстать современные сайты на HTML5 и CSS3

Узнать подробнее CSS от А до Я: как использовать CSS селектор nth-child

PSD to HTML

Практика верстки сайта на CSS Grid с нуля

Смотреть

css селектор: nth-child (четный|нечетный) vs: nth-child(int)

У меня есть следующая проблема с псевдо-селектором CSS :nth-child , и я уверен, что я что-то пропустил.

index.html

<html> <head>...</head> <body> <div>first</div> <div>second</div> <div>third</div> <div>fourth</div> <div>fifth</div> </body> </html>

style_does_not_work.css (не работает)

.selector { background-color: #ffffff; }
.selector:nth-child(1) { background-color: #f00000; }
.selector:nth-child(2) { background-color: #ff0000; }
.selector:nth-child(3) { background-color: #fff000; }
.selector:nth-child(4) { background-color: #ffff00; }
.selector:nth-child(5) { background-color: #fffff0; }

style_that_works.css (для доказательства концепции селектора)

.selector { background-color: #ffffff; }
.selector:nth-child(even) { background-color: #f00000; }
.selector:nth-child(odd) { background-color: #ff0000; }

Я немного смущен, почему :nth-child(2) не работает, но :nth-child(even) делает. Есть ли разница или что-то, что я пропустил?

Моя цель-дать фиксированным позиционным элементам динамическое смещение сверху, в то время как элементы вводятся и удаляются с помощью javascript динамически.

Обновление / Дополнительное

К сожалению, я сделал опечатку в приведенном выше примере. Но это, к сожалению, не решает реального случая — даже я вижу рабочий JS-Fiddles (я действительно смущен из-за этого…)

Кроме того, я опубликовал несколько экранов с текущей проблемой:

Markup Sample

CSS:

.notification-area {
    position: fixed;
    z-index: 999;
    width: 500px;
    height: 100%;
    overflow: hidden;
}

.notification-area.top-right {
    top: 25px;
    right: 25px;
    left: auto;

    -webkit-transition: margin 0.4s, top 0.4s, left 0.4s, right 0.4s, bottom 0.4s;
    -moz-transition: margin 0.4s, top 0.4s, left 0.4s, right 0.4s, bottom 0.4s;
    -ms-transition: margin 0.4s, top 0.4s, left 0.4s, right 0.4s, bottom 0.4s;
    -o-transition: margin 0.4s, top 0.4s, left 0.4s, right 0.4s, bottom 0.4s;
    transition: margin 0.4s, top 0.4s, left 0.4s, right 0.4s, bottom 0.4s;

}

/* these lines are completely ignored */

.notification-area:nth-child(2) { margin: 125px 0px 0px 0px; }
.notification-area:nth-child(3) { margin: 250px 0px 0px 0px; }
.notification-area:nth-child(4) { margin: 375px 0px 0px 0px; }
.notification-area:nth-child(5) { margin: 500px 0px 0px 0px; }


/* this line grabs instead - I don't want to use "even", but it shows me, that the selector :nth-child() should be fine... */
.notification-area:nth-child(even) { margin: 125px 0px 0px 0px; }
html css css3 css-selectors

Поделиться Источник

wildhaber     26 августа 2014 в 11:41

4 Ответов



7

Вы не закрыли div во втором .selector . Работать отлично:

fiddle

Поделиться Alex Char     26 августа 2014 в 11:47



1

Вы пропустили закрывающий тег div во 2-м div.

Поделиться Santy     26 августа 2014 в 11:47



0

Попробуйте изменить nth-child(n) на nth-of-type(n) , так как мы не работаем с их дочерними узлами. Я удалил этот ответ раньше, потому что думал, что настоящая проблема заключалась в том, что вы забыли закрыть один из своих дивов, но вы, похоже, еще не решили его, поэтому я отправлю его снова.

Поделиться

lxcky     27 августа 2014 в 01:06



0

Попробуйте это: nth-child (n+1) вместо :nth-child(2)

Поделиться Deeban Babu     26 августа 2014 в 11:48



css: как пропустить скрытый ребенок в nth-child (нечетный) и nth-child (четный)

Я пытаюсь пропустить скрытый ребенок при использовании nth-child (нечетный) и nth-child (четный), но он не пропускает эти скрытые записи. у меня есть следующие HTML и CSS код. <style> ul {…


jQuery: нечетное и: nth-child CSS3 разное

Я обнаружил, что селектор jQuery :odd и CSS3 nth-child (odd) работают по-разному. http://jsfiddle.net/TMDwT/5 / В желтом это CSS nth-child (нечетный), и если вы раскомментируете JS и…


css nth-child(2n+1) перекрасить css после фильтрации элементов списка

У меня есть список из 20+ пунктов. Цвет фона изменяется с помощью селектора: nth-child(2n+1). (т. четный пункт черный, нечетный пункт белый). Когда я нажимаю кнопку, чтобы отфильтровать определенные…


Как работает селектор CSS3 :nth-child()?

Может ли кто-нибудь объяснить мне, как работает селектор CSS3 :nth-child()? В приведенном ниже примере первый элемент <p> выбирается, несмотря на то, что :nth-child(n) имеет значение 2….


nth-child() не работает в ie8 /7

ul li:nth-child(odd){ color:#c0122f; float:left; width:48%; line-height:30px; font-size:15px; } ul li:nth-child(even){ color:#c0122f; width:48%; float:right; line-height:30px; font-size:15px; } на…


использование nth-child (n) с scss и &: nth-child для предоставления детям различных классов

Я пытаюсь сделать некоторые художественные вещи css, я просто раскрашиваю дивы и делаю из них линии. Сначала я делал это так <a href=’#’></a> и стайлинг через [href*=’#’] { &:after {…


jQuery :nth-child() селектор

У меня возникла проблема с применением стилей css к выпадающим меню навигации в пределах WordPress с использованием jQuery. В принципе, у меня есть 5 навигационных ссылок. Цель состоит в том, чтобы…


IE8: заставить селектор `nth-child` работать внутри запросов media?

В моих проектах веб-сайтов я использую запросы media и селектор nth-child . IE8 не поддерживает их из коробки, но есть полифил, чтобы помочь: Respond.js , mediatizr или css3-mediaqueries.js включить…


CSS селектор nth-child

Я столкнулся с проблемами написания немного сложного селектора CSS. Я хочу, чтобы выбрать div с class содержащих ‘btn-group’ , но не ‘open’ Так что у меня есть что-то вроде;…


Как сделать: nth-last-child (1 + нечетный)

Я хочу сделать что-то вроде nth-last-child(1 + odd) , где последний ребенок влияет, но ONLY, если элемент нечетный . nth-last-child(1 + odd) не работает, хотя, так что же мне делать? Бонус: более…


:nth-child() — Уеб технология за разработчици

Псевдокласът в CSS :nth-child() намира съвпадения според тяхното място в множество от съседни елементи.

/* Избира всеки четвърти елемент
   сред всяко множество от съседи */
:nth-child(4n) {
  color: lime;
}

Правопис

Псевдокласът nth-child  се указва с един аргумент, който представлява образец за намиране на съвпадения със съответстващи елементи. Изборът се отнася до съседни елементи, които са на едно и също ниво в йерархията на документа.

Стойности за ключови думи

odd
Избира елементи, чието местоположение в поредица от съседни елементи е нечетно: 1, 3, 5 и т.н.
even
Избира елементи, чието местоположение в поредица от съседни елементи е нечетно: 2, 4, 6 и т.н.

Функционално записване

<An+B>
Избира елементи, чието местоположение в поредица от съседи съответства на образеца An+B за всяко положително число или нулева стойност на n. указателят за първия елемент е 1. Стойностите A и B трябва да са от вида <integer>s.

Правопис

:nth-child( <nth> [ of <complex-selector-list> ]? )

where
<nth> = <an-plus-b> | even | odd
<complex-selector-list> = <complex-selector>#

where
<complex-selector> = <compound-selector> [ <combinator>? <compound-selector> ]*

where
<compound-selector> = [ <type-selector>? <subclass-selector>* [ <pseudo-element-selector> <pseudo-class-selector>* ]* ]!
<combinator> = '>' | '+' | '~' | [ '||' ]

where
<type-selector> = <wq-name> | <ns-prefix>? '*'
<subclass-selector> = <id-selector> | <class-selector> | <attribute-selector> | <pseudo-class-selector>
<pseudo-element-selector> = ':' <pseudo-class-selector>
<pseudo-class-selector> = ':' <ident-token> | ':' <function-token> <any-value> ')'

where
<wq-name> = <ns-prefix>? <ident-token>
<ns-prefix> = [ <ident-token> | '*' ]? |
<id-selector> = <hash-token>
<class-selector> = '.' <ident-token>
<attribute-selector> = '[' <wq-name> ']' | '[' <wq-name> <attr-matcher> [ <string-token> | <ident-token> ] <attr-modifier>? ']'

where
<attr-matcher> = [ '~' | | | '^' | '$' | '*' ]? '='
<attr-modifier> = i | s

Примери

Примерни образци за избор

tr:nth-child(odd) or tr:nth-child(2n+1)
Избира нечетните редове в таблица в HTML: 1, 3, 5 и т.н.
tr:nth-child(even) or tr:nth-child(2n)
Избира четните редове  в таблица в HTML: 2, 4, 6 и т.н.
:nth-child(7)
Избира седмия елемент.
:nth-child(5n)
Избира всеки пети елемент: 5 [=5×1], 10 [=5×2], 15 [=5×3], и т.н. 
:nth-child(3n+4)
Избира четвъртия елемент след всеки трети. Поредицата започва от нула: 4 [= (3×0)+4], 7 [= (3×1)+4], 10 [= (3×2)+4], 13 [= (3×3)+4], etc.
:nth-child(-n+3)
Избира първите три елемента в множество от съседи. [=-0+3, -1+3, -2+3]
p:nth-child(n)
Избира всеки елемент <p> в множество от съседи. Избират се същите елементи както при обикновен избор p, но се прилагат по-точни указания.
p:nth-child(1) or p:nth-child(0n+1)
Избира всеки първи елемент <p>  в множество от съседи. Това е същото като :first-child и има същата точност.
p:nth-child(n+8):nth-child(-n+15)
Избира от осмия до петнадесетия елемент <p> включително в множество от съседи. 

 

Подробен пример

HTML
<h4><code>span:nth-child(2n+1)</code>, WITHOUT an
   <code>&lt;em&gt;</code> among the child elements.</h4>
<p>Children 1, 3, 5, and 7 are selected.</p>
<div>
  <span>Span 1!</span>
  <span>Span 2</span>
  <span>Span 3!</span>
  <span>Span 4</span>
  <span>Span 5!</span>
  <span>Span 6</span>
  <span>Span 7!</span>
</div>

<br>

<h4><code>span:nth-child(2n+1)</code>, WITH an
   <code>&lt;em&gt;</code> among the child elements.</h4>
<p>Children 1, 5, and 7 are selected.<br>
   3 is used in the counting because it is a child, but it isn't
   selected because it isn't a <code>&lt;span&gt;</code>.</p>
<div>
  <span>Span!</span>
  <span>Span</span>
  <em>This is an `em`.</em>
  <span>Span</span>
  <span>Span!</span>
  <span>Span</span>
  <span>Span!</span>
  <span>Span</span>
</div>

<br>

<h4><code>span:nth-of-type(2n+1)</code>, WITH an
   <code>&lt;em&gt;</code> among the child elements.</h4>
<p>Children 1, 4, 6, and 8 are selected.<br>
   3 isn't used in the counting or selected because it is an <code>&lt;em&gt;</code>, 
   not a <code>&lt;span&gt;</code>, and <code>nth-of-type</code> only selects
   children of that type. The <code>&lt;em&gt;</code> is completely skipped
   over and ignored.</p>
<div>
  <span>Span!</span>
  <span>Span</span>
  <em>This is an `em`.</em>
  <span>Span!</span>
  <span>Span</span>
  <span>Span!</span>
  <span>Span</span>
  <span>Span!</span>
</div>
CSS
html {
  font-family: sans-serif;
}

span,
div em {
  padding: 5px;
  border: 1px solid green;
  display: inline-block;
  margin-bottom: 3px;
}

.first span:nth-child(2n+1),
.second span:nth-child(2n+1),
.third span:nth-of-type(2n+1) {
  background-color: lime;
}
Изход

Спецификации

Съвместимост

Update compatibility data on GitHub
DesktopMobile
ChromeEdgeFirefoxInternet ExplorerOperaSafariAndroid webviewChrome for AndroidFirefox for AndroidOpera for AndroidSafari on iOSSamsung Internet
:nth-child()Chrome Full support 1Edge Full support 12Firefox Full support 3.5IE Full support 9Opera Full support 9.5
Full support 9.5
Notes Before Opera 15, Opera does not handle dynamically inserted elements for :nth-child().
Safari Full support 3.1WebView Android Full support ≤37Chrome Android Full support 18Firefox Android Full support 4Opera Android Full support 10.1
Full support 10.1
Notes Before Opera 15, Opera does not handle dynamically inserted elements for :nth-child().
Safari iOS Full support 3.1Samsung Internet Android Full support 1.0
Matches elements with no parentChrome Full support 57Edge No support NoFirefox Full support 52IE No support NoOpera Full support 44Safari No support NoWebView Android Full support 57Chrome Android Full support 57Firefox Android Full support 52Opera Android Full support 43Safari iOS No support NoSamsung Internet Android Full support 7.0
of <selector> syntaxChrome No support No
No support No
Notes See bug 304163.
Edge No support NoFirefox No support No
No support No
Notes See bug 854148.
IE No support NoOpera No support NoSafari Full support 9WebView Android No support NoChrome Android No support NoFirefox Android No support No
No support No
Notes See bug 854148.
Opera Android No support NoSafari iOS Full support 9Samsung Internet Android No support No

Legend

Full support  
Full support
No support  
No support
See implementation notes.
See implementation notes.

Вижте също

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *