Soporte de IE8 para CSS Media Query


178

¿IE8 no admite la siguiente consulta de medios CSS:

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

Si no, ¿cuál es la forma alternativa de escribir? Lo mismo funciona bien en Firefox.

¿Algún problema con el código a continuación?

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

para aquellos que quieran probar css en línea con medios y usar responder (.min) .js respond no funciona en esta situación, parece que funciona para archivos
.css

Respuestas:


77

Las versiones de Internet Explorer anteriores a IE9 no admiten consultas de medios .

Si está buscando una forma de degradar el diseño para los usuarios de IE8, puede encontrar útiles los comentarios condicionales de IE. Con esto, puede especificar una hoja de estilo específica de IE 8/7/6 que sobrescribe las reglas anteriores.

Por ejemplo:

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

Esto no permitirá un diseño receptivo en IE8, pero podría ser una solución más simple y accesible que usar un complemento JS.


94
No veo cómo las hojas de estilo condicionales resolverán un problema de diseño receptivo.
James Westgate

8
No entiendo cómo resolvería esta solución el diseño receptivo en IE. Cargar diferentes hojas de estilo dependiendo del navegador no tuvo nada que ver con el uso de diferentes propiedades de estilo dependiendo del tamaño del navegador, por ejemplo.
Klikerko

13
Creo que la respuesta correcta es que IE8 no admite consultas de medios . Esta respuesta dice eso, pero no está del todo claro a primera vista. De todos modos, pensé que tenía apoyo y esta respuesta me ayudó a darme cuenta de lo contrario.
Jason

54
Es cierto que esta respuesta no es una solución receptiva PERO y para mí es un gran "PERO", el hecho es que IE8 no se usa en iPad o tabletas Android. IE8 podría usarse en PC con XP / Vista principalmente desde 2003 a 2009, pantallas principalmente de alrededor de 1024px de ancho. Windows Mobile está bajo IE6 y Windows Pone bajo IE9 +. La verdadera pregunta aquí es preguntarse si hacer que responder a IE8 sea realmente útil.
Gregoire D.

16
@GregoireD. Sí lo es. Porque hay personas que ven páginas web con zoom. En mi empresa, formateamos las páginas desde 4x zoom en 800x600, para accesibilidad. Eso hace una pantalla como 400px de ancho. Las consultas de medios son realmente útiles para eso, a pesar del navegador que elija (e IE8 está incluido).
Arkana

341

css3-mediaqueries-js es probablemente lo que está buscando: este script emula consultas de medios. Sin embargo (desde el sitio del script) "no funciona en las @importhojas de estilo ed (que no debe usar de todos modos por razones de rendimiento). Tampoco escuchará el atributo multimedia de los elementos <link>y <style>".

En el mismo sentido, tiene el Respond.js más simple , que permite consultas solo min-widthy de max-widthmedios.


77
¿Por qué no se etiqueta esto como la respuesta? Perfecto para mi gracias. Por cierto, no deberías usar las consultas de importación de CSS debido a la sobrecarga.
RichW

perfecto, exactamente lo que estaba buscando!
Somdow

¡¡Gracias!! Esta respuesta, y respond.js, me ahorraron un montón de tiempo tratando de hacer una solución para mediaqueries en ie8.
Ingusmat el

3
no importa -> el .js debe incluirse después de los archivos
.css

44
La respuesta funcionó, pero css3-mediaqueries no. Supongo que se debe a que Respond es autónomo, pero css3-mediaqueries se basa en algunas funciones de jQuery, como la detección de agente de usuario, y estas funciones se desaprobaron y se eliminaron (consulte los documentos de jQuery).
Anton Boritskiy

50

La mejor solución que he encontrado es Respond.js, especialmente si su principal preocupación es asegurarse de que su diseño receptivo funcione en IE8. Es bastante ligero a 1kb cuando min / gzipped y puede asegurarse de que solo los clientes de IE8 lo carguen:

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

También es el método recomendado si está utilizando bootstrap: http://getbootstrap.com/getting-started/#support-ie8-ie9


14

IE8 (y versiones inferiores) y Firefox anteriores a 3.5 no admiten consultas de medios. Safari 3.2 lo admite parcialmente.

Hay algunas soluciones alternativas que usan JavaScript para agregar soporte de consultas de medios a estos navegadores. Prueba estos:

Plugin jQuery de Consultas de medios (solo trata con ancho máximo / mínimo)

css3-mediaqueries-js: una biblioteca que tiene como objetivo agregar soporte de consultas de medios a navegadores no compatibles


Ok ... acabo de incluir css3-mediaqueries.js en mi página ... todavía no funciona en IE ... es decir, la consulta de medios "@import url (" desktop.css ") no solo la pantalla y (ancho del dispositivo: 768px); " así como "@import url (" desktop.css ") no screen y (device-width: 768px);"
testndtv

No estoy seguro si tengo que hacer algo adicional como well..besides incluyendo el guión ..
testndtv

Tenga en cuenta que no funciona en CSS importado. intente esto: <link rel = "stylesheet" type = "text / css" media = "not screen and (device-width: 768px)" href = "desktop.css" />
Faraz Kelhini el

Oh, ok, ya veo. En realidad, en ese caso, puede que no me ayude, ya que estoy buscando algo sin hacer nada en la página ... es decir, solo externamente en el CSS ...
#

Ese script googletrunk css3 js especifica que solo funciona con mediaquery que se usa dentro de la hoja de estilo CSS, en lugar de externamente, como 'solo pantalla y ...'. Esto significa que tiene que unificar sus hojas de estilo en una y dentro de ellas hacer lo que quería hacer externamente: @media screen y (max-width: 980px) {
Capagris

11

Tomado de la página del proyecto css3mediaqueries.js.

Nota: No funciona en las hojas de estilo @ import'ed (que no debe usar de todos modos por razones de rendimiento). Tampoco escuchará el atributo multimedia de los elementos <link>y <style>.


¡+1 por decirme que no funciona en las hojas de estilo @ import'ed! Ahórreme mucho tiempo en mi tema infantil WP.
Vinicius Garcia

8

Una manera fácil de usar css3-mediaqueries-js es incluir lo siguiente antes de la etiqueta de cierre del cuerpo:

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

Respuesta editada: IE entiende solo la pantalla y la impresión como medios de importación. Todos los demás CSS suministrados junto con la declaración de importación hacen que IE8 ignore la declaración de importación. El navegador Geco como safari o mozilla no tenía este problema.


Mi IE no está en la compatibilidad mode..Also ¿hay alguna otra alternativa para IE..Basically sólo desea seleccionar todo excepto un dispositivo de pantalla de 768px ..
testndtv

Además, como se discutió en el enlace que proporcionó, intenté configurar el doctype como <! DOCTYPE html PUBLIC "- // W3C // DTD XHTML 1.0 Transitional // ES" " w3.org/TR/xhtml1/DTD/xhtml1-transitional. dtd "> ... Todavía no funciona ..
testndtv

1
No estoy seguro si te entendí bien. ¿Puede usar JavaScript para detectar la resolución de la pantalla? Con CSS no hay otra manera. ¿Estás seguro de que no tienes ningún error relacionado con el que causa que el mínimo sea anulado o ignorado? Una sugerencia es la barra de herramientas para desarrolladores. Con esto se puede probar en directo y sin pagereloads
SRA

El cambio al modo peculiar es muy rápido, ¿lo comprobaste? Eso también puede conducir a resultados no deseados. Quirkmode sobrescribirá su doctype. También es una práctica Dios para probar justo lo que quieres en un super pequeño proyecto para enhure que no es un error de / resultado relacionado
SRA

ok .. Así es como lo actualicé ahora ... tengo common.css y dentro de él digo; ... @import url ("desktop.css") pantalla; @import url ("ipad.css") solo pantalla y (ancho del dispositivo: 768px); No estoy seguro de si este enfoque es correcto, pero funciona para escritorio (IE / FF) y para iPad. ¿Puede haber algún problema con este enfoque?
testndtv

6

Las consultas de medios no son compatibles en absoluto en IE8 y versiones posteriores.


Una solución basada en Javascript

Para agregar soporte para IE8, puede usar una de varias soluciones JS. Por ejemplo, Respond puede agregarse para agregar soporte de consultas de medios para IE8 solo con el siguiente código:

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

CSS Mediaqueries es otra biblioteca que hace lo mismo. El código para agregar esa biblioteca a su HTML sería idéntico:

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

La alternativa

Si no le gusta una solución basada en JS, también debe considerar agregar una hoja de estilo solo IE <9 donde ajuste su estilo específico a IE <9. Para eso, debe agregar el siguiente HTML a su código:

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

Nota :

Técnicamente es una alternativa más: usar hacks CSS para apuntar a IE <9. Tiene el mismo impacto que una hoja de estilo de IE <9 solamente, pero no necesita una hoja de estilo separada para eso. Sin embargo, no recomiendo esta opción, ya que producen un código CSS no válido (que es solo una de varias razones por las cuales el uso de hacks CSS generalmente está mal visto hoy).


5

Antes de Internet Explorer 8 no había soporte para consultas de medios. Pero dependiendo de su caso, puede intentar usar comentarios condicionales para apuntar solo a Internet Explorer 8 y versiones inferiores. Solo tiene que usar una arquitectura de archivos CSS adecuada.



3

IE no agregó soporte de consultas de medios hasta IE9. Entonces con IE8 no tienes suerte.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.