2010-09-24 2 views
6

Ho il seguente codice:: last-child selettore di pseudo classe CSS e Internet Explorer

ul.myList li{ 
    border-right: 1px dotted #000; 
} 

Tuttavia, l'ultimo elemento, ho bisogno di rimuovere quel confine come il design che sto lavorando da dettami che l'ultimo elemento non richiede un bordo come separatore.

Così, ho bisogno di indirizzare l'ultimo figlio di una lista e così nel mio css ho aggiunto

ul.myList li:last-child{ 
    border-right: none; 
} 

Il che, come tutti sappiamo, funziona bene in Firefox, Safari e Chrome.

Il problema sta quando osserviamo la pagina in Internet Explore 6 fino alle 8.

risposta

11

Così, dopo un po 'scavare intorno, ho trovato la risposta:

Se il browser è IE < 8, specificare un foglio di stile come questo:

<!--[if lt IE 8]> 
<link rel="stylesheet" href="css/ie_all.css" type="text/css" /> 
<![endif]--> 

E all'interno del vostro foglio di stile IE specificare le seguenti regole :

ul.myList li{ 
    border-right: expression(this.nextSibling==null?'none':'inherit'); 
} 

il nextSibling espressione sembra di vedere se c'è un elemento dopo che è e se c'è eredita la regola indicata in t ha un foglio di stile predefinito, altrimenti applica una nuova regola.

Maggiori informazioni possono essere trovate here

+1

+1 E 'orribile, ma potrebbe funzionare. Più uno da me per aver trovato una soluzione praticabile per IE. (E meno un milione di punti per IE per averci fatto venire degli hack come questo in primo luogo). Vale la pena sottolineare che IE9 (attualmente in versione beta) può supportarlo, quindi potresti voler regolare [if IE] come IE8 o solo inferiore. – Spudley

+0

Grazie per la risposta, non ero al 100% se IE 9 lo supportasse. Regolerò il mio post in modo da riflettere per IE 8 e sotto. –

+1

IE9 Lo supporterà, secondo la propria documentazione .. Comunque affidabile. – Kyle

2

IE8 < non supporta questo selettore pseudo. Controlla il MSDN article per tutte le funzionalità supportate :)

Puoi dare un'occhiata a questa soluzione jQuery a Enable pseudo selectors in IE oppure lasciarla come è in IE.

1

È possibile farlo utilizzando jQuery. Quindi, invece di fare affidamento sui CSS. Utilizza i selettori jQuery per impostare la proprietà del tuo ultimo elemento. Capisco che non hai taggato la tua domanda.

jQuery('ul.myList li:last-child').css("Key","value"); 
2

Come Internet Explorer prima versione 9 (che è ancora in fase di sviluppo) non supporta :last-child selettore a tutti, la mia soluzione migliore, purtroppo, potrebbe essere quella di impostare una classe o id sull'ultimo elemento nella lista e prova a selezionarlo.

Ovviamente, se lasciare il bordo destro per IE non interromperà completamente il layout, potresti voler lasciare il tuo codice così com'è, se non ti dispiace IE rovinerà il rendering solo un po '.