Supporto IE8 per CSS Media Query


178

IE8 non supporta la seguente query multimediale CSS:

@import url("desktop.css") screen and (min-width: 768px);

In caso contrario, qual è il modo alternativo di scrivere? Lo stesso funziona bene in Firefox.

Problemi con il codice qui sotto?

@import url("desktop.css") screen; 
@import url("ipad.css") only screen and (device-width:768px);

per coloro che vogliono provare i CSS in linea con i media e utilizzare la risposta (.min) .js respond non funziona in questa situazione - sembra che funzioni per i file .css
NoWomenNoCry

Risposte:


77

Le versioni di Internet Explorer precedenti a IE9 non supportano le query multimediali .

Se stai cercando un modo per degradare il design per gli utenti di IE8, potresti trovare utili i commenti condizionali di IE. Usando questo, puoi specificare un foglio di stile specifico per IE 8/7/6 che sovrascrive le regole precedenti.

Per esempio:

<link rel="stylesheet" type="text/css" media="all" href="style.css"/>
<!--[if lt IE 9]>
<link rel="stylesheet" type="text/css" media="all" href="style-ie.css"/>
<![endif]-->

Ciò non consentirà un design reattivo in IE8, ma potrebbe essere una soluzione più semplice e più accessibile rispetto all'utilizzo di un plug-in JS.


94
Non vedo come i fogli di stile condizionale risolveranno un problema di progettazione reattiva.
James Westgate,

8
Non capisco come questa soluzione risolva il responsive design in IE? Il caricamento di fogli di stile diversi a seconda del browser non ha nulla a che fare con l'utilizzo di proprietà di stile diverse a seconda delle dimensioni del browser, ad esempio.
Klikerko,

13
Penso che la risposta giusta sia che IE8 non supporti le media query . Questa risposta lo dice, ma non è del tutto chiaro a prima vista. Indipendentemente da ciò, ho pensato che avesse supporto e questa risposta mi ha aiutato a realizzare diversamente.
Jason

54
È vero che questa risposta non è una soluzione reattiva MA e per me è un enorme "MA", il fatto è che IE8 non è utilizzato su iPad o tablet Android. IE8 potrebbe essere utilizzato su PC XP / Vista principalmente dal 2003 al 2009, con schermi prevalentemente larghi circa 1024 pixel. Windows Mobile è in IE6 e Windows Pone in IE9 +. La vera domanda qui è chiedersi se rendere reattivo per IE8 è davvero utile?
Gregoire D.

16
@GregoireD. Sì. Perché ci sono persone che visualizzano le pagine Web con lo zoom. Nella mia azienda formattiamo le pagine con zoom 4x in 800x600, per accessibilità. Questo rende uno schermo di 400 pixel di larghezza. Le media query sono davvero utili per questo, nonostante il browser scelto (e IE8 è incluso).
Arkana,

341

css3-mediaqueries-js è probabilmente quello che stai cercando: questo script emula le query multimediali. Tuttavia (dal sito dello script) "non funziona con i @importfogli di stile ed (che non dovresti usare comunque per motivi di prestazioni). Inoltre non ascolterà l'attributo media degli elementi <link>e <style>".

Allo stesso modo hai il Respond.js più semplice , che abilita solo min-widthe max-widthmedia query.


7
Perché questo non è etichettato come risposta? Perfetto per me grazie. A proposito, non dovresti usare le query di importazione css a causa del sovraccarico.
RichW

perfetto, esattamente quello che stavo cercando!
Somdow

Grazie!! Questa risposta, e reply.js, mi ha fatto risparmiare un sacco di tempo cercando di risolvere il problema con le mediaquery in ie8.
Ingusmat,

3
nevermind -> .js dovrebbe essere incluso dopo i file .css ... xD
kaljak

4
La risposta ha funzionato, ma css3-mediaqueries no. Suppongo sia perché Respond è autonomo, ma css3-mediaqueries si basa su alcune funzioni jQuery come il rilevamento dell'agente utente e questa funzione è stata deprecata e rimossa (consultare i documenti jQuery).
Anton Boritskiy,

50

La migliore soluzione che ho trovato è Respond.js soprattutto se la tua preoccupazione principale è assicurarsi che il tuo design reattivo funzioni in IE8. È abbastanza leggero a 1kb quando min / gzip e puoi assicurarti che solo i client IE8 lo caricino:

<!--[if lt IE 9]>
<script src="respond.min.js"></script>
<![endif]-->

È anche il metodo consigliato se si utilizza bootstrap: http://getbootstrap.com/getting-started/#support-ie8-ie9


14

IE8 (e versioni precedenti) e Firefox precedenti alla 3.5 non supportano la media query. Safari 3.2 lo supporta parzialmente.

Esistono alcune soluzioni alternative che utilizzano JavaScript per aggiungere il supporto per le query multimediali a questi browser. Prova questi:

Plug-in jQuery Media Queries (si occupa solo della larghezza massima / minima)

css3-mediaqueries-js - una libreria che mira ad aggiungere il supporto per le query multimediali ai browser non supportati


Ok..ho appena incluso css3-mediaqueries.js nella mia pagina ... Ancora non funziona in Internet Explorer ... la media query "@import url (" desktop.css ") non solo schermo e (device-width: 768px);" nonché "@import url (" desktop.css ") non screen e (device-width: 768px);"
testndtv,

Non sono sicuro di dover fare qualcosa in più ... oltre alla sceneggiatura ..
testndtv

Si noti che non funziona su CSS importati. prova questo: <link rel = "stylesheet" type = "text / css" media = "non schermo e (device-width: 768px)" href = "desktop.css" />
Faraz Kelhini

oh ok..vedo. In realtà in quel caso, potrebbe non essermi di aiuto, dato che sto cercando qualcosa senza fare nulla sulla pagina ... solo esternamente nel CSS ..
testndtv

Lo script googletrunk css3 js specifica che funziona solo con mediaquery utilizzata all'interno del foglio di stile CSS, piuttosto che esternamente come "solo schermo e ....". Ciò significa che devi unificare i tuoi fogli di stile in uno e al loro interno fare ciò che volevi fare esternamente: schermo @media e (larghezza massima:
980 px

11

Tratto dalla pagina del progetto css3mediaqueries.js.

Nota: non funziona su fogli di stile @ import (che non dovresti usare comunque per motivi di prestazioni). Inoltre, non ascolterà l'attributo multimediale degli elementi <link>e <style>.


+1 per avermi detto che non funziona su fogli di stile importati @! Risparmiami molto tempo sul tema del mio bambino WP.
Vinicius Garcia

8

Un modo semplice di usare css3-mediaqueries-js è includere quanto segue prima del tag body di chiusura:

<!-- css3-mediaqueries.js for IE less than 9 -->
<!--[if lt IE 9]>
<script 
   src="//css3-mediaqueries-js.googlecode.com/svn/trunk/css3-mediaqueries.js">
</script>
<![endif]-->

6

Risposta modificata: IE comprende solo lo schermo e la stampa come supporti di importazione. Tutti gli altri CSS forniti insieme all'istruzione import fanno sì che IE8 ignori l'istruzione import. Il browser Geco come Safari o Mozilla non ha avuto questo problema.


Il mio IE non è in modalità di compatibilità..Inoltre c'è qualche altro alternativa per IE..In pratica voglio solo selezionare tutto tranne un dispositivo con schermo 768px ..
testndtv

Inoltre, come discusso sul link che hai fornito, ho provato a impostare il doctype come <! DOCTYPE html PUBLIC "- // W3C // DTD XHTML 1.0 Transitional // EN" " w3.org/TR/xhtml1/DTD/xhtml1-transizionale. dtd "> ... continua a non funzionare ..
testndtv

1
Non sono sicuro se ti ho capito bene. È possibile utilizzare JavaScript per rilevare la risoluzione dello schermo? Con CSS non c'è altro modo. Sei sicuro di non avere alcun errore correlato con è che causa l'overriden o l'ignorare il min. Un suggerimento è la barra degli strumenti è sviluppatore. Con ciò puoi provare dal vivo senza ricaricare le pagine
sra

Il passaggio alla modalità Quirk è molto veloce, l'hai verificato? Ciò può anche portare a risultati indesiderati. Quirkmode sovrascriverà il tuo tipo di documento. È anche pratica divina testare esattamente ciò che si desidera in un progetto super minuscolo per assicurare che non si tratti di un errore / risultato correlato
sra

ok..Ecco come l'ho aggiornato ora ... Ho common.css e al suo interno dico; ... Schermata @import url ("desktop.css"); @import url ("ipad.css") solo schermo e (larghezza dispositivo: 768px); Non sono sicuro che questo approccio sia corretto, ma funziona per desktop (IE / FF) e iPad. Può esserci qualche problema con questo approccio?
testndtv,

6

Le query multimediali non sono affatto supportate in IE8 e versioni successive.


Una soluzione alternativa basata su Javascript

Per aggiungere supporto per IE8, è possibile utilizzare una delle diverse soluzioni JS. Ad esempio, Rispondi può essere aggiunto per aggiungere il supporto per le query multimediali per IE8 solo con il seguente codice:

<!--[if lt IE 9]>
<script 
   src="respond.min.js">
</script>
<![endif]-->

CSS Mediaqueries è un'altra libreria che fa la stessa cosa. Il codice per aggiungere quella libreria al tuo HTML sarebbe identico:

<!--[if lt IE 9]>
<script 
   src="css3-mediaqueries.js">
</script>
<![endif]-->

L'alternativa

Se non ti piace una soluzione basata su JS, dovresti anche considerare l'aggiunta di un foglio di stile solo per IE <9 in cui regoli il tuo stile specifico per IE <9. Per questo, è necessario aggiungere il seguente codice HTML al codice:

<!--[if lt IE 9]>
<link rel="stylesheet" type="text/css" media="all" href="style-ielt9.css"/>
<![endif]-->

Nota :

Tecnicamente è un'altra alternativa: utilizzare gli hack CSS per indirizzare IE <9. Ha lo stesso impatto di un foglio di stile IE <9, ma per questo non è necessario un foglio di stile separato. Non raccomando questa opzione, poiché producono codice CSS non valido (che è solo uno dei diversi motivi per cui l'uso di hacker CSS è generalmente disapprovato oggi).


5

Prima di Internet Explorer 8 non c'erano supporti per le query multimediali. Ma a seconda del caso, puoi provare a utilizzare i commenti condizionali per indirizzare solo Internet Explorer 8 e versioni precedenti. Devi solo usare una corretta architettura di file CSS.



3

IE non ha aggiunto il supporto per le query multimediali fino a IE9. Quindi con IE8 sei sfortunato.

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.