Это не столько ответ, сколько не ответ, то есть пример, показывающий, почему один из ответов с наибольшим количеством голосов, приведенных выше , на самом деле неверен.
Я думал, что ответ выглядел хорошо. Фактически, это дало мне то, что я искал: :nth-of-type
, который, для моей ситуации, работал. (Так что, спасибо за это, @Bdwey.)
Сначала я прочитал комментарий @BoltClock (который говорит, что ответ по сути неправильный) и отклонил его, так как я проверил свой вариант использования, и это сработало. Затем я понял, что @BoltClock имеет репутацию более 300 000 (!) И имеет профиль, где он утверждает, что он гуру CSS. Хм, подумал я, может, мне стоит присмотреться поближе.
Получается так: div.myclass:nth-of-type(2)
НЕ означает «второй экземпляр div.myclass». Скорее, это означает «второй экземпляр div, и он также должен иметь класс myclass». Это важное различие, когда между вашими div.myclass
экземплярами есть div
.
Мне потребовалось некоторое время, чтобы обдумать это. Итак, чтобы помочь другим понять это быстрее, я написал пример, который, как мне кажется, демонстрирует концепцию более четко, чем письменное описание: я угнал h1
, h2
, h3
и h4
элементы по существу должны быть div
с. Я поместил класс A
на некоторые из них, сгруппировал их по 3, а затем покрасил 1-й, 2-й и 3-й экземпляры в синий, оранжевый и зеленый, используя h?.A:nth-of-type(?)
. (Но, если вы внимательно читаете, вы должны спросить «1, 2 и 3 экземпляры чего?»). Я также вставил разнородный (то есть другой h
уровень) или похожий (т.е. тот же h
уровень) неклассифицированный элемент в некоторые группы.
Обратите внимание, в частности, на последнюю группу из 3. Здесь, неклассифицированный элемент h3
вставлен между первым и вторым элементами h3.A
. В этом случае 2-й цвет (т.е. оранжевый) не появляется, а 3-й цвет (т.е. зеленый) отображается во 2-м экземпляре h3.A
. Это показывает, что n
в h3.A:nth-of-type(n)
считает h3
с, а не h3.A
с.
Ну, надеюсь, это поможет. И спасибо, @ BoltClock.
div {
margin-bottom: 2em;
border: red solid 1px;
background-color: lightyellow;
}
h1,
h2,
h3,
h4 {
font-size: 12pt;
margin: 5px;
}
h1.A:nth-of-type(1),
h2.A:nth-of-type(1),
h3.A:nth-of-type(1) {
background-color: cyan;
}
h1.A:nth-of-type(2),
h2.A:nth-of-type(2),
h3.A:nth-of-type(2) {
background-color: orange;
}
h1.A:nth-of-type(3),
h2.A:nth-of-type(3),
h3.A:nth-of-type(3) {
background-color: lightgreen;
}
<div>
<h1 class="A">h1.A #1</h1>
<h1 class="A">h1.A #2</h1>
<h1 class="A">h1.A #3</h1>
</div>
<div>
<h2 class="A">h2.A #1</h2>
<h4>this intervening element is a different type, i.e. h4 not h2</h4>
<h2 class="A">h2.A #2</h2>
<h2 class="A">h2.A #3</h2>
</div>
<div>
<h3 class="A">h3.A #1</h3>
<h3>this intervening element is the same type, i.e. h3, but has no class</h3>
<h3 class="A">h3.A #2</h3>
<h3 class="A">h3.A #3</h3>
</div>