Debo usar max-device-width o max-width?


Con CSS media queries puede usar max-device-width para apuntar a un ancho de dispositivo (como un dispositivo iPhone o Android) y/o un max-width que apunta a un ancho de página.

Si usas max-device-width, cuando cambias el tamaño de la ventana del navegador en tu escritorio, el CSS no cambiará, porque tu escritorio no cambia de tamaño.

Si usas max-width, cuando cambias el tamaño de la ventana del navegador en tu escritorio, es posible que se te muestre un estilo orientado a dispositivos móviles, como elementos y menús táctiles y ese tipo de cosas.

Dirigiéndose a navegadores específicos(y dispositivos?) ahora está en desuso y deberías ser un poco más agnóstico con lo que apuntas. ¿Eso también se aplica a las consultas de medios?

¿Por qué apuntarías a uno sobre el otro? ¿Cuál es el recomendado?

Este es un ejemplo de una consulta de medios que uso en un sitio web de producción:

@media only screen and (min-device-width: 320px) and (max-device-width: 480px) and (min-device-height: 480px) and (max-device-height: 640px) {  
    /* Change a menu to fit the screen better, etc... */
}

Tiendo a usar ambos max-device-width y max-width.

Author: Josh Crozier, 2013-08-29

3 answers

TL;DR

Si estás haciendo un sitio web responsivo, probablemente querrás usar min-width/max-width en lugar de min-device-width/max-device-width con el fin de apuntar a una gama más amplia de tamaños de pantalla.

Recuerde especificar una meta etiqueta viewport en la sección <head> de su documento:

<meta name="viewport" content="width=device-width, initial-scale=1">

Explicación

Debido a todas las diferentes resoluciones de pantalla posibles y densidades de píxeles que un dispositivo determinado puede tener, un píxel no es un píxel porque hay varios cosas a tener en cuenta (zoom, densidad de píxeles, resolución y tamaño de pantalla, orientación del dispositivo, relación de aspecto, etc..). En este caso, un píxel se conoce como "unidad de referencia óptica" en lugar de un píxel de hardware físico.

Afortunadamente, puede especificar una meta etiqueta viewport en la sección <head> de su documento para controlar el ancho y el escalado de la ventana del navegador. Si esta etiqueta tiene un valor content de width=device-width, el ancho de la pantalla coinciden con los píxeles independientes del dispositivo y se asegurará de que todos los diferentes dispositivos deben escalar y comportarse de manera consistente.

<meta name="viewport" content="width=device-width, initial-scale=1">

En términos de consultas de medios, probablemente querrá usar max-width en lugar de max-device-width, ya que max-width se dirigirá a la ventana de visualización (ventana actual del navegador), mientras que max-device-width se dirigirá 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 a diferencia de max-width, solo se tiene en cuenta el tamaño real de pantalla completa del dispositivo; no el tamaño actual de la ventana del navegador.

Esto hace una gran diferencia si está tratando de crear un diseño adaptable porque el sitio no será sensible al cambiar el tamaño del navegador. Además, si está utilizando max-device-width las consultas de medios que está utilizando para dirigirse a dispositivos con pantallas más pequeñas no se aplicarán a los escritorios, incluso al cambiar el tamaño de la ventana del navegador para que coincida con dicho tamaño de pantalla más pequeño.

Este artículo sobre Desarrolladores de Google desalienta enormemente el uso de max-device-width:

Google Developers-Fundamentos web - Responsive CSS media queries

También es posible crear consultas basadas en *-device-width; aunque esta práctica es desaconseja.

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 tamaño de la pantalla. Desafortunadamente, algunos navegadores, incluido el navegador Android heredado, pueden no informar el ancho del dispositivo correctamente y, en su lugar, informar el tamaño de la pantalla en píxeles del dispositivo en lugar del ancho de la ventana esperado.

Además, el uso de *-device-width puede evitar que el contenido se adapte a los escritorios u otros dispositivos que permiten 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.

Además Lectura:

 87
Author: Josh Crozier,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-09-05 23:10:17

Si utiliza max-width, cuando cambia el tamaño de la ventana del navegador en su escritorio, es posible que se le muestre un estilo orientado a dispositivos móviles, como elementos y menús táctiles y ese tipo de cosas.

Es impactante para mí que parece ser la opinión popular que esto es deseable. No he averiguado si el diseño fluido / líquido antes de mobile se consideraba malo por las razones equivocadas o correctas. Me parece que esto es solo una versión más elegante de liquid layout, pero uno que los diseñadores están adoptando por alguna razón.

Cuando la comunidad de diseño en general eligió ponerse del lado de los diseños fijos sobre liquid a mediados de la década de 2000, fue porque los reflujos de texto impedían la legibilidad, lo que a menudo resultaba en viudas y otros artefactos tipográficos. Además, mantener el código base era a menudo complicado de diseño en diseño para evitar que los elementos chocaran, etc. La única diferencia entre los diseños líquidos y el diseño sensible es que sensible, debido a los mejores navegadores y el la proliferación de marcos similares a los de la masonería hacen que sea más fácil de lograr.

Yo personalmente uso min/max-device-width porque prefiero seguir convenciones de documentos de escritorio que tienen décadas de precedencia. No todos los documentos que abra en Internet se van a comportar de esta manera en un escritorio, ni tampoco otros tipos de documentos o aplicaciones que cargue en su escritorio. Páginas diseñadas antes del dominio del móvil, al igual que MS Word, Photoshop, etc. mantenga sus posiciones de desplazamiento y no cambie sus diseños permitiendo a los usuarios realizar un seguimiento del contenido dentro del flujo de página al realizar la tarea no relacionada de administración de ventanas.

Generalmente uso 3 puntos de interrupción: uno para teléfonos, uno para tabletas y uno para computadoras de escritorio. El escritorio y, a menudo, al menos el retrato horizontal son fijos y el retrato de la tableta y debajo son líquidos. Esta combinación de adaptativo y responsivo permite que el escritorio se comporte como un sitio de escritorio mientras me mantiene alejado de lo necesario para diseñar 10 y pico por separado diseños de dispositivos móviles de ancho fijo. El texto no se vuelve a ajustar en los dispositivos móviles porque no se puede cambiar el tamaño de la ventana.

 7
Author: Paul Fox,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-05-15 04:47:55

Evite el ancho del dispositivo. La razón es que no se puede saber cómo los navegadores de los usuarios responden a ella.

Para IOS, parece ser simple, al menos con Safari. Parece ser una sola respuesta de ancho de dispositivo independiente de la orientación. Además, el ancho del dispositivo se indica solo para el lado más corto del dispositivo. Lo probé en el iPhone 4S y el iPad. Respondieron a 320 y 768 respectivamente sin importar la orientación.

Para Android es más impredecible. Probé seis navegadores en un Huawei Ascend Y330 (navegador predeterminado de Android, Chrome, Opera, Firefox, Firefox Beta, Dolphin). La respuesta varía según el tipo de navegador y la orientación.

Probé en una página con query (max-device-width: ***px) y para averiguar qué valor px necesito completar para obtener la consulta en un estado verdadero. Se necesitaron cuatro valores diferentes (320, 480, 534, 800) dependiendo del tipo de navegador y la orientación. Esto hace que el ancho del dispositivo sea inutilizable.

 6
Author: Håkan Olsson,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-08-06 14:52:13