: последний-ребенок не работает, как ожидалось?
проблема заключается в этом CSS и HTML. Вот это ссылка на jsFiddle С примером кода.
HTML
<ul>
<li class"complete">1</li>
<li class"complete">2</li>
<li>3</li>
<li>4</li>
</ul>
CSS
li.complete:last-child {
background-color:yellow;
}
li.complete:last-of-type {
background-color:yellow;
}
не должны ли эти строки CSS нацеливаться на последний элемент li с" полным " классом?
этот запрос в jQuery также не нацелен на него:
$("li.complete:last-child");
но это делает:
$("li.complete").last();
li {
background-color: green;
}
li.complete:first-child {
background-color: white;
}
li.complete:first-of-type {
background-color: red;
}
li.complete:last-of-type {
background-color: blue;
}
li.complete:last-child {
background-color: yellow;
}
<ul>
<li class="complete">1</li>
<li class="complete">2</li>
<li>3</li>
<li>4</li>
</ul>
3 ответа:
The
last-child
селектор используется для выбора последнего дочернего элемента родителя. Он не может использоваться для выбора последнего дочернего элемента с определенным классом под данным родительским элементом.другая часть составного селектора (который прикреплен перед
:last-child
) задает дополнительные условия, которым должен удовлетворять последний дочерний элемент для его выбора. В приведенном ниже фрагменте вы увидите, как выбранные элементы отличаются в зависимости от остальной части соединения селектор..parent :last-child{ /* this will select all elements which are last child of .parent */ font-weight: bold; } .parent div:last-child{ /* this will select the last child of .parent only if it is a div*/ background: crimson; } .parent div.child-2:last-child{ /* this will select the last child of .parent only if it is a div and has the class child-2*/ color: beige; }
<div class='parent'> <div class='child'>Child</div> <div class='child'>Child</div> <div class='child'>Child</div> <div>Child w/o class</div> </div> <div class='parent'> <div class='child'>Child</div> <div class='child'>Child</div> <div class='child'>Child</div> <div class='child-2'>Child w/o class</div> </div> <div class='parent'> <div class='child'>Child</div> <div class='child'>Child</div> <div class='child'>Child</div> <p>Child w/o class</p> </div>
чтобы ответить на ваш вопрос, ниже будет стиль последнего ребенка
li
элемент с цветом фона, а красный.li:last-child{ background-color: red; }
но следующий селектор не будет работать для вашей разметки, поскольку
last-child
нетclass='complete'
даже если этоli
.li.complete:last-child{ background-color: green; }
это сработало бы, если бы (и только если) последний
li
в вашей разметке также былоclass='complete'
.
для решения вашего запроса в комментарии:
@Гарри мне кажется довольно странным, что: .complete: last-of-type пока не работает .complete: first-of-type работает, независимо от его позиции, это родительский элемент. Спасибо за помощь.
переключатель
.complete:first-of-type
работает в скрипке, потому что это (то есть элемент сclass='complete'
) по-прежнему является первым элементом типаli
внутри родительского. Пытаться чтобы добавить<li>0</li>
как первый элемент подul
и вы найдете, чтоfirst-of-type
также вьетнамки. Это потому чтоfirst-of-type
иlast-of-type
селекторы выбирают первый / последний элемент каждого типа под родительским элементом.см. ответ, опубликованный BoltClock, в этой поток для получения более подробной информации о том, как работает селектор. Это настолько всеобъемлющим, как он получает :)
: last-child не будет работать, если элемент не является самым последним элементом
в дополнение к ответу Гарри, Я думаю, что очень важно добавить/подчеркнуть, что :last-child не будет работать, если элемент не является самым последним элементом в контейнере. По какой-то причине мне потребовались часы, чтобы понять это, и хотя ответ Гарри очень тщательный, я не мог извлечь эту информацию из "селектор last-child используется для выбора последнего дочернего элемента a родитель."
предположим, что это мой селектор:
a:last-child {}
это работает:
<div> <a></a> <a>This will be selected</a> </div>
это не так:
<div> <a></a> <a>This will no longer be selected</a> <div>This is now the last child :'( </div> </div>
это не потому что
a
элемент не является последним элементом внутри своего родителя.это может быть очевидно, но это было не для меня...
As last-child используется для выбора последнего дочернего элемента родительского элемента. вы можете достичь того же, что и это
<ul> <li class="complete" id="one">1</li> <li class="complete" id="two">2</li> <li>3</li> <li>4</li> </ul> li.complete#one{background-color:yellow;} li.complete#two{background-color:red;}
дайте ID в список, а затем дать стиль или что-нибудь, как вы хотите