risposta

20

Dal IE6 è essenzialmente limitato a:

  • selettori di classe
  • selettori di ID
  • (spazio) selettori discendenti
  • a: -solo pseudo-selettori

tuo unico opzioni sono:

  • Usa più classi per identificare gli elementi
  • Usa JavaScript (fortemente non consigliato se non in casi altamente specializzati)

Trovo molto utile per sfruttare la possibilità di assegnare più classi a un elemento separandoli con uno spazio: class="foo bar"

+0

è html valido? – Ngm

+1

@ngm no, le specifiche di attributo duplicato non posso –

+2

@ngm è possibile comunque usare class = "foo bar" – Dels

2

Utilizzare le classi, questa è l'unica soluzione, purtroppo.

+0

è html valido? – Ngm

+0

use class = "button bar" invece –

+0

@ngm puoi usare class = "foo bar" – Dels

26

Questo non è possibile senza ricorrere al codice HTML con una pila di selettori di classe estranei, purtroppo.

Suggerirei di progettare il vostro sito in modo che il vostro CSS interamente valido funzioni per le persone che usano i browser moderni, e che sia ancora utilizzabile in IE6, sebbene visivamente non del tutto corretto. Devi solo trovare il giusto equilibrio tra ottenere il tuo sito allo standard e piegarsi all'indietro per gli utenti che non aggiorneranno. È un browser spezzato, trattalo come tale.

+4

Mi piace questa risposta +1 – alex

+1

Sì, questo è il modo inoltrare. Gli sviluppatori devono smettere di cercare di rendere le cose pixel-perfect in IE6. Per esempio ho impostato alcune colonne usando lo pseudo-selettore: first-child per rimuovere il margine sinistro sulla prima colonna. Per IE6 ho solo ridotto i margini in modo da non rovinare. – DisgruntledGoat

+1

È possibile con le espressioni CSS. Vedi http://stackoverflow.com/q/8231617/143739 – kzh

8

Se si vuole attribuire selettore in IE6, è possibile utilizzare Dean Edward IE.js. http://dean.edwards.name/IE7/

che renderanno IE 5+ si comportano molto più come IE7

 
supports the following CSS selectors: 
parent > child 
adjacent + sibling 
adjacent ~ sibling 
[attr], [attr="value"], [attr~="value"] etc 
.multiple.classes (fixes bug) 
:hover, :active, :focus (for all elements) 
:first-child, :last-child, only-child, nth-child, nth-last-child 
:checked, :disabled, :enabled 
:empty, :contains(), :not() 
:before/:after/content: 
:lang() 

non ho avuto IE6 (utilizzare IE7) quindi non posso detto ha funzionato, ma fare un tentativo

+4

Questa è una buona opzione, ma attenzione, (e non è per esperienza, ma guardando il codice e il modo in cui implementa il supporto) che le tue regole CSS non automaticamente "applica" alle modifiche dinamiche agli elementi che avvengono tramite JS - l'aggiunta di classi, elementi, ecc. non otterrà le regole CSS originali. – Nicole

0

Se stai usando jQuery sul tuo sito, un'altra opzione è SuperSelectors - passa attraverso i fogli di stile del tuo sito, aggiungendo dinamicamente le classi agli elementi in modo che anche IE6 possa crogiolarsi nel brillante supporto di selettori CSS come ul li:first-child li:nth-child(odd) a:hover.

6

È possibile utilizzare Internet Explorer espressioni CSS combinati con la sottolineatura di sicurezza ("_", IE6 e precedenti) mod CSS:

/* Adds dotted bottom border to `<ABBR>` with a `title` attribute. */ 
abbr { 
     _border-bottom: expression(this.title ? '1px dotted' : 'none'); 
} 

abbr[title] { 
     border-bottom: 1px dotted; 
} 

Capisco, che ha chiesto per i CSS "valido", ma se il CSS incide sopra i tuoi capricci, leggi Safe CSS Hacks.

È possibile che questo potrebbe essere modificato a:

.ie6 abbr { 
     _border-bottom: expression(this.title ? '1px dotted' : 'none'); 
} 

abbr[title] { 
     border-bottom: 1px dotted; 
} 

cioè se il codice HTML è iniziato come:

<!--[if lt IE 7]><html class="ie6"><![endif]--> 
<!--[if IE 7]> <html class="ie7"><![endif]--> 
<!--[if IE 8]> <html class="ie8"><![endif]--> 
<!--[if gt IE 8]><!--><html><!--<![endif]--> 
+0

+1 per l'istruzione expression(). Ho costruito siti web e creato CSS per 12 anni ed è la prima volta in vita mia a vedere questa roba fredda e umida! –

+1

Non funziona in IE8. Alla fine l'hanno rimosso a causa di problemi di sicurezza, ma funziona in IE7. IE ha anche una cosa chiamata "comportamenti" nei CSS. – kzh