Псевдокласс nth-child
относится к «N-му сопоставленному дочернему элементу», то есть, если у вас есть следующая структура:
<div>
<h1>Hello</h1>
<p>Paragraph</p>
<p>Target</p>
</div>
Затем p:nth-child(2)
выберет второго потомка, который также является p (а именно, p
с «Параграфом»).
p:nth-of-type
выберет второй соответствующий p
элемент (а именно наша цель p
).
Вот отличная статья Криса Койера на эту тему @ CSS-Tricks.com
Причина, по которой вы ломаетесь, заключается в том, что тип относится к типу элемента (а именно, div
), но первый div не соответствует упомянутым вами правилам (.row .label
), поэтому правило не применяется.
Причина в том, что CSS анализируется справа налево , что означает, что браузер сначала просматривает :nth-of-type(1)
, определяет, что ищет элемент типа div
, который также является первым типом, который соответствует элементу .row
, и первым элементом .icon
. Затем он читает, что элемент должен иметь класс .label
, который не соответствует ни одному из вышеперечисленных.
Если вы хотите выбрать первый элемент метки, вам нужно либо обернуть все метки в их собственный контейнер, либо просто использовать nth-of-type(3)
(при условии, что всегда будет 2 значка).
Другой вариант, (к сожалению) будет использовать ... подождите ... jQuery:
$(function () {
$('.row .label:first')
.css({
backgroundColor:"blue"
});
});