CSS ostatnie dziecko (-1)

161

Szukam selektora css, który pozwala mi wybrać przedostatnie dziecko listy.

<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>

Metoda statyczna:

ul li:nth-child(5)

Metoda dynamiczna:

ul li:last-child(-1)

co oczywiście nie sprawdza poprawności, również nth-last-child nie wydaje się zapewniać dynamicznego sposobu .. Mogę wrócić do javascript, ale zastanawiam się, czy istnieje sposób CSS, który przeoczyłem

Hedde van der Heide
źródło
11
Zwykle nazywa się to „przedostatnim”. Jest na to również inne wymyślne słowo: „przedostatni”.
BoltClock
2
@BoltClock Uwielbiam słowo „przedostatni”. Zamierzam teraz użyć go w szalonej aktualizacji na Facebooku.
Andrew Barber
3
Możliwy duplikat Wybierz przedostatni element z css
Castro Roy
2
Dziękujemy wszystkim, którzy wspomnieli o przedostatnim - ten pojawił się na pierwszym miejscu w Google pod względem „css przedostatni”.
chakeda

Odpowiedzi:

303

Państwo może używać :nth-last-child(); w rzeczywistości, poza :nth-last-of-type()tym nie wiem, czego jeszcze mógłbyś użyć. Nie jestem pewien, co masz na myśli, mówiąc „dynamiczny”, ale jeśli masz na myśli, czy styl odnosi się do nowego przedostatniego dziecka, gdy do listy zostanie dodanych więcej dzieci, tak będzie. Interaktywne skrzypce.

ul li:nth-last-child(2)
BoltClock
źródło
OK, to działa! Interpretator kodu (jsfiddle) nie sprawdził poprawności .. Zgadnij błąd po ich stronie! dzięki
Hedde van der Heide
4
@David Allen: Myślę, że nie obchodzi go, czy już próbuje użyć :nth-child(5)i :last-child. Takie komentarze powinny odnosić się do pytania lub być pozostawione dla siebie.
BoltClock
1
Może nie wiedzieć o problemie z brakiem wsparcia. Podkreślam to ... Odpowiedziałem za pomocą jQuery iz przyjemnością powiem, że nie będzie działać z użytkownikami z wyłączonym JavaScriptem. ale więcej ludzi korzysta z IE7 / 8 niż po wyłączeniu JS
David Allen,
1
@David, wierzę, że wtyczka selectivrz lub modernizr może rozwiązać ten problem, będę musiał wyświetlić dokumentację
Hedde van der Heide
@ArgsKwargs Wielki komentarz nigdy nie słyszał o selectivizr. Daj nam znać, czy obsługuje n-te-ostatnie-dziecko
David Allen,
1

Jeśli nie możesz zmusić PHP do oznaczenia tego elementu klasą, lepiej jest użyć jQuery.

jQuery(document).ready(function () {
  $count =  jQuery("ul li").size() - 1;
  alert($count);
  jQuery("ul li:nth-child("+$count+")").css("color","red");
});
David Allen
źródło
6
To wręcz denerwujące, że jQuery nie implementuje :nth-last-child()tylko dlatego, że John uważa, że ​​nikt go nie używa .
BoltClock
Wolę oznaczać pythonem ;-) ontopic: Css wydaje się w ten sposób w porządku, może jsfiddle też uważa, że ​​nikt go nie używa :-)
Hedde van der Heide
@ArgsKwargs: Dziwne, dlaczego nie działałoby w jsFiddle. Interpretacja tego zależy od przeglądarki; nie ma własnego silnika CSS.
BoltClock
@BoltClock nie zrozum mnie źle, to działa, pomocnik kodu (wizualizacja kolorów) po prostu wskazuje coś niezamkniętego (więc nawet nie próbowałem)
Hedde van der Heide
Nie sądzę, aby którykolwiek z kodów był niezamknięty. Ale wiem, co masz na myśli mówiąc o „wizualizacji kolorów”
David Allen,