CSS last-child (-1)

161

Я ищу css-селектор, который позволяет мне выбрать предпоследний дочерний элемент списка.

<ul>
     <li>1</li>
     <li>2</li>
     <li>3</li>
     <li>4</li>
     <li>5</li> <!-- select the pre last item dynamically no matter how long this list is -->
     <li>6</li>
</ul>

Статический метод:

ul li:nth-child(5)

Динамический метод:

ul li:last-child(-1)

что, конечно, не проверяет, также nth-last-child не обеспечивает динамический способ ... Я могу вернуться к javascript, но мне интересно, есть ли способ css, который я упустил

Хедде ван дер Хайде
источник
11
Обычно это называется «второй по счету». Есть также другое причудливое слово для этого: «предпоследний».
BoltClock
2
@BoltClock Мне нравится слово «предпоследний». Я собираюсь использовать его в обновлении Facebook сейчас.
Эндрю Барбер
3
Возможный дубликат Выбрать второй последний элемент с помощью css
Кастро Рой
2
Спасибо всем, кто упомянул предпоследний - это появилось на первом месте в Google для "css penultimate".
Чакеда

Ответы:

303

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

ul li:nth-last-child(2)
BoltClock
источник
Хорошо, это работает! Интерпретатор кода (jsfiddle) не подтвердил это .. Угадайте ошибку на их стороне! спасибо
Хедде ван дер Хайде
4
@ Дэвид Аллен: я не думаю, что ему все равно, если он уже пытается использовать :nth-child(5)и :last-child. Подобные комментарии должны либо идти по этому вопросу, либо оставаться наедине с собой.
BoltClock
1
Он может не знать о проблеме без поддержки. Я просто выделил его .... Я дал ответ, используя jQuery, и я с радостью скажу, что он не будет работать с пользователями с отключенным JavaScript. но больше людей используют IE7 / 8, чем JS diabled
Дэвид Аллен
1
@ Дэвид, я верю, что плагин selectivrz или modernizr может решить эту проблему, мне придется просмотреть документы
Хедде ван дер Хайде
@ArgsKwargs Отличный комментарий никогда не слышал о selectivizr. Сообщите нам, поддерживает ли он nth-last-child
Дэвид Аллен
1

Если вы не можете заставить PHP маркировать этот элемент классом, лучше использовать jQuery.

jQuery(document).ready(function () {
  $count =  jQuery("ul li").size() - 1;
  alert($count);
  jQuery("ul li:nth-child("+$count+")").css("color","red");
});
Дэвид Аллен
источник
6
Это прямо раздражает, что jQuery не реализует :nth-last-child()только потому, что Джон думает, что никто не использует его .
BoltClock
Я бы предпочел ярлык с помощью python ;-) ontopic: Ну, css выглядит нормально, может быть, jsfiddle также считает, что никто не использует его :-)
Хедде ван дер Хайде
@ArgsKwargs: странно, почему это не сработает в jsFiddle. Это зависит от браузера, чтобы интерпретировать это; у него нет собственного движка CSS.
BoltClock
@BoltClock не поймите меня неправильно, это работает, помощник по коду (цветная визуализация) просто указывает на что-то незакрытое (поэтому я даже не пытался)
Хедде ван дер Хайде
Я не думаю, что какой-либо код не является открытым. Но я знаю, что вы имеете в виду под «цветовой визуализацией»
Дэвид Аллен