TL; DR
Si está creando un sitio web receptivo, use min-width
/ max-width
en sus consultas de medios en lugar de min-device-width
/ max-device-width
para apuntar a una gama más amplia de tamaños de pantalla.
Según el borrador de la especificación de 2018 Media Queries Level 4 , la device-width
función de medios está obsoleta . Se mantendrá por compatibilidad con versiones anteriores, pero debe evitarse.
8. Apéndice A: Funciones multimedia obsoletas
Para consultar el tamaño de la ventana gráfica (o el cuadro de página en los medios de la página), se deben usar las funciones width
, height
y aspect-ratio
medios, en lugar de device-width
, device-height
y device-aspect-ratio
, que se refieren al tamaño físico del dispositivo independientemente de la cantidad de espacio disponible para el documento que se está presentando. Las device-*
funciones multimedia también se utilizan a veces como un proxy para detectar dispositivos móviles. En su lugar, los autores deben usar funciones de medios que representen mejor el aspecto del dispositivo contra el que intentan diseñar.
Como nota al margen, recuerde especificar una metaetiqueta de ventana gráfica en la <head>
sección de su documento:
<meta name="viewport" content="width=device-width, initial-scale=1">
Explicación
Debido a todas las diferentes resoluciones de pantalla y densidades de píxeles posibles que puede tener un dispositivo determinado, un píxel no es un píxel porque hay varias cosas a tener en cuenta (zoom, densidad de píxeles, resolución y tamaño de la pantalla, orientación del dispositivo, relación de aspecto, etc. ..). En este caso, un píxel se denomina en realidad una "unidad de referencia óptica" en lugar de un píxel de hardware físico.
Afortunadamente, puede especificar una metaetiqueta de ventana gráfica en la <head>
sección de su documento para controlar el ancho y la escala de la ventana gráfica del navegador. Si esta etiqueta tiene un content
valor de width=device-width
, el ancho de la pantalla coincidirá con los píxeles independientes del dispositivo y garantizará que todos los dispositivos diferentes escalen y se comporten de manera consistente.
<meta name="viewport" content="width=device-width, initial-scale=1">
En términos de consultas de medios, probablemente querrá usar en max-width
lugar de max-device-width
, ya que max-width
apuntará a la ventana gráfica (ventana actual del navegador), mientras que max-device-width
apuntará al tamaño / resolución de pantalla completa real del dispositivo.
En otras palabras, si está utilizando max-device-width
, no verá diferentes consultas de medios aplicadas al cambiar el tamaño de su navegador de escritorio, porque max-width
, a diferencia , solo se tiene en cuenta el tamaño de pantalla completa real del dispositivo; no el tamaño actual de la ventana del navegador.
Esto marca una gran diferencia si está tratando de crear un diseño adaptable porque el sitio no responderá al cambiar el tamaño del navegador. Además, si está utilizando max-device-width
las consultas de medios que está utilizando para apuntar a dispositivos con pantallas más pequeñas, no se aplicarán a los escritorios, incluso cuando se cambia el tamaño de la ventana del navegador para que coincida con dicho tamaño de pantalla más pequeño.
A partir de 2018, el último borrador de la especificación de consulta de medios ha dejado de utilizar la device-width
función de medios, por lo que debe evitarse.
Además, este artículo sobre desarrolladores de Google desaconseja el uso de max-device-width
:
Desarrolladores de Google - Conceptos básicos de la Web - Consultas de medios CSS receptivas
También es posible crear consultas basadas en *-device-width
; aunque esta práctica está fuertemente desaconsejada .
La diferencia es sutil pero muy importante: min-width
se basa en el tamaño de la ventana del navegador, mientras que min-device-width
se basa en el tamaño de la pantalla. Lamentablemente, algunos navegadores, incluido el navegador Android heredado, pueden no informar el ancho del dispositivo correctamente y, en cambio, informar el tamaño de la pantalla en píxeles del dispositivo en lugar del ancho esperado de la ventana gráfica.
Además, el uso *-device-width
puede evitar que el contenido se adapte en los escritorios u otros dispositivos que permitan cambiar el tamaño de las ventanas porque la consulta se basa en el tamaño real del dispositivo, no en el tamaño de la ventana del navegador.
Otras lecturas: