CSS ultimo figlio (-1)


161

Sto cercando un selettore CSS che mi permetta di selezionare l'ultimo figlio dell'elenco.

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

Metodo statico:

ul li:nth-child(5)

Metodo dinamico:

ul li:last-child(-1)

che ovviamente non convalida, anche l'ennesimo figlio non sembra fornire un modo dinamico .. Posso ricorrere a javascript ma mi chiedo se c'è un modo css che ho trascurato


11
Di solito si chiama "secondo ultimo". C'è anche un'altra parola di fantasia per questo: "penultimo".
BoltClock

2
@BoltClock Adoro la parola "penultimo". Ora vado a usarlo in un aggiornamento accattivante di Facebook.
Andrew Barber,


2
Grazie a tutti quelli che menzionano penultimo - questo è apparso n. 1 su Google per "css penultimate".
Chakeda,

Risposte:


303

È possibile utilizzare :nth-last-child(); in effetti, inoltre :nth-last-of-type(), non so cos'altro potresti usare. Non sono sicuro di cosa intendi per "dinamico", ma se intendi se lo stile si applica al nuovo penultimo figlio quando vengono aggiunti più figli all'elenco, sì, lo farà. Violino interattivo.

ul li:nth-last-child(2)

Va bene che funziona! L'interprete di codice (jsfiddle) non l'ha convalidato .. Indovina un bug dalla loro parte! grazie
Hedde van der Heide,

4
@David Allen: Non penso che gli importi se sta già cercando di usare :nth-child(5)e :last-child. Commenti come questo dovrebbero o andare sulla domanda o essere tenuti a se stessi.
BoltClock

1
Potrebbe non essere a conoscenza del problema dell'assenza di supporto. Lo sto solo evidenziando .... Ho dato una risposta usando jQuery e sarò felice di dire che non funzionerà con gli utenti con disabilitazione JavaScript. ma più persone usano IE7 / 8 che avere JS diabetico
David Allen,

1
@David, credo che il plugin selectivrz o modernizr possa risolvere quel problema, dovrò visualizzare i documenti
Hedde van der Heide,

@ArgsKwargs Great Comment non ha mai sentito parlare di selectivizr. Facci sapere se supporta l'ennesimo figlio
David Allen,

1

A meno che non sia possibile ottenere PHP per etichettare quell'elemento con una classe, è meglio usare jQuery.

jQuery(document).ready(function () {
  $count =  jQuery("ul li").size() - 1;
  alert($count);
  jQuery("ul li:nth-child("+$count+")").css("color","red");
});

6
È decisamente fastidioso che jQuery non si attui :nth-last-child()solo perché John pensa che nessuno lo usi .
BoltClock

Preferirei etichettare con Python ;-) ontopic: Beh, css sembra bene in questo modo, forse jsfiddle pensa anche che nessuno lo usi :-)
Hedde van der Heide,

@ArgsKwargs: strano perché non funzionerebbe in jsFiddle. Spetta al browser interpretarlo; non ha un proprio motore CSS.
BoltClock

@BoltClock non fraintendetemi, funziona, l'helper del codice (visualizzazione a colori) indica semplicemente qualcosa di non chiuso (quindi non ci ho nemmeno provato)
Hedde van der Heide,

Non credo che nessuno dei codici sia chiuso. Ma so cosa intendi per "visualizzazione a colori"
David Allen,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.