CSS-остання дитина (-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.
Ендрю Барбер


2
Дякуємо всім, хто згадує передостаннє - це було показано №1 в Google для "передостаннього css".
чакеда

Відповіді:


303

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

ul li:nth-last-child(2)

Гаразд, що працює! Інтерпретатор коду (jsfiddle) не підтвердив його. Вгадайте помилку на їх стороні! дякую
Hedde van der Heide

4
@David Allen: Я не думаю, що йому байдуже, якщо він вже намагається використовувати :nth-child(5)і :last-child. Коментарі, подібні до цього, повинні або надходити до питання, або залишатися для себе.
BoltClock

1
Він може не знати про жодну проблему підтримки. Я просто підкреслюю це .... Я відповів, використовуючи jQuery, і я з радістю скажу, що він не буде працювати з користувачами з відключенням JavaScript. але більше людей використовують IE7 / 8, ніж те, що JS стартував
Девід Аллен

1
@David, я вважаю, що плагін selectivrz або modernizr може виправити цю проблему, мені доведеться переглянути документи
Hedde van der Heide

@ArgsKwargs Чудовий коментар ніколи не чув про selectivizr. Повідомте нас, чи підтримує це дитина-остання дитина
Девід Аллен

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 також вважає, що ніхто не використовує його :-)
Hedde van der Heide

@ArgsKwargs: Дивно, чому це не працюватиме у jsFiddle. Інтерпретувати це потрібно в браузері; він не має власного двигуна CSS.
BoltClock

@BoltClock не зрозумійте мене неправильно, це працює, помічник коду (кольорова візуалізація) просто вказує на щось незакрите (тому я навіть не пробував)
Hedde van der Heide

Я не думаю, що жоден код не закритий. Але я знаю, що ви маєте на увазі про "кольорову візуалізацію"
Девід Аллен
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.