2015-01-16 14 views
8

AGGIORNAMENTO: Il collegamento di violino che ho pubblicato ha ora il codice di lavoro. :not(:last-child) e :nth-last-child(n + 2) funzionano entrambi perfettamente.CSS nth-child seleziona tutto tranne l'ultimo elemento quando la lunghezza è sconosciuta

sto cercando di utilizzare il selettore nth-child o nth-last-child per selezionare ogni li in un ul tranne l'ultimo. Il problema è che la lunghezza dell'elenco può variare da 1 a 5 elementi. Non sono stato in grado di trovare alcuna documentazione o esempi su come ottenerlo.

Ecco il codice HTML per la ul:

<ul class="breadcrumbs"> 
    <li> 
     <a href="/">Home</a> 
    </li> 
    <li> 
     <a href="/categories/1">Articles</a> 
    </li> 
    <li> 
     <a href="/categories/6">Specials</a> 
    </li> 
    <li class="current"> 
     <a href="/categories/6/articles/21">Song Lyrics</a> 
    </li> 
</ul> 

Ecco il mio codice corrente:

ul > li:nth-last-child(-1n+4) > a:hover { 
    color: red; 
} 

Questo codice seleziona ancora l'ultimo elemento della lista. Ho anche provato il codice qui sotto, ma questo non seleziona nulla. Ho provato anche diverse altre combinazioni, ma non hanno funzionato affatto o selezionato l'ultimo elemento.

ul > li:nth-child(1):nth-last-child(2) > a:hover { 
    color: red; 
} 

Here is a fiddle.

+0

perché non è sufficiente impostare uno stile di base per il 'li' e quindi utilizzare 'li: last-child' per selezionare solo l'ultimo? Non dovrebbe avere bisogno di "nth-child" per ottenere ciò di cui hai bisogno. –

+0

Sto usando Foundation quindi gli stili sono per lo più definiti in un file sass, ma questo aspetto particolare non è un'opzione standard da personalizzare, quindi ho incluso un selettore personalizzato in un file sass overrides. – ACIDSTEALTH

risposta

4

Usa :nth-last-of-type o :nth-last-child

http://jsfiddle.net/t0k8gp4d/

li:nth-last-of-type(n + 2) a { 
 
    color: red; 
 
}
<ul class="breadcrumbs"> 
 
    <li> 
 
     <a href="/">Home</a> 
 
    </li> 
 
    <li> 
 
     <a href="/categories/1">Articles</a> 
 
    </li> 
 
    <li> 
 
     <a href="/categories/6">Specials</a> 
 
    </li> 
 
    <li class="current"> 
 
     <a href="/categories/6/articles/21">Song Lyrics</a> 
 
    </li> 
 
</ul>

+0

@someuser (ha cancellato il suo commento) Purtroppo, questo è tutto ciò che ho. Capisco parzialmente come funziona, ma non posso dare una spiegazione definitivamente accurata per questo. Il metodo è [spiegato qui] (https://developer.mozilla.org/en-US/docs/Web/CSS/:nth-child#Summary) con la formula 'an + b-1'. Per quanto ho capito, dato che 'n' è l'indice, e aggiungendo 2 a quel valore, il selettore parte da 2. I bambini sono indici basati su' 1' (non basati su '0'), e quindi,' n + 2 'è' 0 + 2' risultante in '2' per il primo elemento (secondo). l'aggiunta di 'last' alla pseudo-classe inizia dalla fine. –

+0

Il tuo metodo funziona bene con meterializecss se hai un modulo all'interno del navigatore principale (come una casella di ricerca), mentre il proposto non lo fa. –

0

È possibile utilizzare questo

<ul class="breadcrumbs"> 
    <li> 
     <a href="/">Home</a> 
    </li> 
    <li> 
     <a href="/categories/1">Articles</a> 
    </li> 
    <li> 
     <a href="/categories/6">Specials</a> 
    </li> 
    <li class="current"> 
     <a href="/categories/6/articles/21">Song Lyrics</a> 
    </li> 
</ul> 

CSS

ul > li{ 
background:red; 
} 
ul > li:last-child{ 
background:black; 
} 

Ma se avete assolutamente bisogno di cambiare il loro stile di fuori del elemento li principale utilizzare questo

ul > li{ 
background:black; 
} 
ul > li:not:last-child{ 
background:red; 
} 
Problemi correlati