Antes de profundizar en lo que está preguntando, repasemos un poco sobre por qué viewportexiste la metaetiqueta en primer lugar. Esto es lo que he reunido.
¿Por qué necesitamos la viewportetiqueta?
Una ventana gráfica es un área donde se puede ver el contenido web. Por lo general, la página representada (contenido web) es más grande que la ventana gráfica. Como resultado, generalmente usamos barras de desplazamiento para ver el contenido oculto (porque la ventana gráfica no puede mostrar todo). Citado del Módulo de Adaptación de Dispositivo CSS Nivel 1 :
La vista estrecha es un problema para los documentos diseñados para verse bien en los navegadores de escritorio. El resultado es que los proveedores de navegadores móviles usan un tamaño de bloque inicial fijo que es diferente del tamaño de la ventana gráfica y cercano al de una ventana típica de navegador de escritorio. Además de desplazarse o desplazarse, el zoom a menudo se usa para cambiar entre una vista general del documento y hacer zoom en áreas particulares del documento para leer e interactuar.
En dispositivos móviles (y otros dispositivos más pequeños), el bloque contenedor inicial suele ser más grande que la ventana gráfica. Por ejemplo, un dispositivo móvil que tiene un ancho de pantalla de 640pxpodría tener un bloque inicial que contiene 980px. En este caso, el bloque contenedor inicial se reduce para 640pxque pueda encajar en la pantalla del móvil. Este 640pxancho (ancho de pantalla) es lo que se llama initial-widthde la ventana gráfica que será pertinente para nuestra discusión.
Entonces ... ¿Por qué necesitamos esta viewportetiqueta? Bueno, hoy en día, tenemos consultas de medios que nos permiten diseñar para dispositivos móviles. Sin embargo, esta consulta de medios depende del ancho real de la ventana gráfica. En dispositivos móviles, el agente de usuario aplica automáticamente el estilo del tamaño de la ventana de visualización a uno fijo diferente (generalmente más grande que el tamaño de la ventana de visualización inicial). Entonces, si el ancho de la ventana gráfica de un dispositivo móvil es fijo, las reglas CSS que usamos en las consultas de medios no se ejecutarán simplemente porque el ancho de la ventana gráfica nunca cambia. Usando la viewportetiqueta, podemos controlar el ancho real de la ventana gráfica (después de haber sido diseñado por el UA). Citado de MDN :
Sin embargo, este mecanismo no es tan bueno para las páginas que están optimizadas para pantallas estrechas que utilizan consultas de medios: si la ventana virtual es de 980px, por ejemplo, las consultas de medios que inician a 640px o 480px o menos nunca se usarán, lo que limita la efectividad de tales Técnicas de diseño receptivo.
Tenga en cuenta que la viewportetiqueta también puede cambiar la altura de la ventana gráfica real, no solo el ancho
viewport etiqueta width
El widthen una viewportetiqueta se traduce max-widthen la @viewportregla. Cuando declara el widthas device-width, se traduce 100%en la @viewportregla. El valor porcentual se resuelve en función initial-widthde la ventana gráfica. Entonces, si todavía estamos usando el ejemplo anterior, max-widthse resolverá a un valor de 640px. Como has descubierto, esto solo especifica el max-width. El min-widthserá automáticamente extend-to-zoom.
extend-to-zoom
Su pregunta fue ¿cuál es exactamente el valor de extender para hacer zoom ? Por lo que he reunido, es el valor que se usa para admitir que la ventana gráfica se extienda para adaptarse al área de visualización en un nivel de zoom dado. En otras palabras, es un valor de tamaño de ventana gráfica que cambia según el valor de zoom especificado. ¿Un ejemplo? Dado que el max-zoomvalor de la hoja de estilo UA es 5.0y initial-widthes 320px, <meta name="viewport" content="width=10">se resolverá a un ancho real inicial de 64px. Esto tiene sentido porque si un dispositivo solo tiene 320 px y solo se puede ampliar 5xel valor normal, entonces el tamaño mínimo de la ventana de visualización sería 320px divided by 5, lo que significa mostrar solo 64 px a la vez ( y no 10px¡porque eso requeriría un zoom de 32x!). El algoritmo utilizará este valor para determinar cómo extender (cambiar) los valores min-widthy max-width, que desempeñarán un papel en la determinación del ancho real de la ventana gráfica.
Poniendolo todo junto
Entonces, ¿cuál es la diferencia entre <meta name="viewport" content="width=device-width, initial-scale=1.0">y <meta name="viewport" content="initial-scale=1.0">? Simplemente rehaga los pasos del algoritmo ( esto y esto ). Hagamos lo último (el sin widthatributo) primero. (Asumiremos que el initial-widthde la ventana gráfica es 640px).
widthno se establece, esto da como resultado max-widthy min-widthestar extend-to-zoomen la @viewportregla.
initial-scalees 1.0. Esto significa que el zoomvalor también es1.0
- Vamos a resolver
extend-to-zoom . Pasos:
extend-zoom = MIN(zoom, max-zoom). La MINoperación resuelve el valor que no es auto. Aquí zoomestá 1.0y max-zoomestá auto. Esto significa que extend-zoomes1.0
extend-width = initial-width / extend-zoom. Esto es facil; divide 640 entre 1. Obtienes extend-widthes igual a640
- Como
extend-zoomno es auto, saltaremos al segundo condicional. max-widthes extend-to-zoom, de hecho , esto significa que max-widthse establecerá en extend-width. Así,max-width = 640
min-widthes también extend-to-zoom, esto significa establecer min-widthen max-width. Obtenemosmin-width = 640
- Después de resolver los
autoextend-to-zoom valores no (es decir, los ) para max-widthy min-width. Podemos proceder al siguiente procedimiento . Debido a que min-widtho max-widthno es auto, vamos a utilizar la primera ifen el procedimiento, estableciendo así el área de visualización efectiva inicial widtha MAX(min-width, MIN(max-width, initial-width)), lo que equivale a MAX(640, MIN(640, 640)). Esto se resuelve 640para su vista real inicialwidth
- Pasando al siguiente procedimiento . En este paso,
widthno lo es auto. El valor no cambia y terminamos con la ventana gráfica real widthde640px
Hagamos lo primero.
widthestá configurado, esto da como resultado max-widthser 100%( 640pxen nuestro caso) y min-widthestar extend-to-zoomen la @viewportregla.
initial-scalees 1.0. Esto significa que el zoomvalor también es1.0
- Vamos a resolver
extend-to-zoom . Si sigue los pasos cuidadosamente (casi lo mismo que arriba), terminará con un max-widthde 640pxy un min-widthde 640px.
- Probablemente puedas ver el patrón ahora. Obtendremos el ancho de la ventana gráfica real de
640px.
Entonces, ¿cuál es la diferencia percibida? Esencialmente ninguno . Ambos hacen lo mismo. Espero que mi explicación ayude ;-) Si algo estuvo mal, dímelo.
1.0, pero no estoy seguro de esto. De todos modos, gran respuesta, gracias!viewportatributo de etiqueta es cuando no especifica elinitial-scale. Por ejemplo, cuando escribe<meta name="viewport" content="360px">, sabe que no está controlando el nivel de zoom inicial. Como tal, a partir de mis pruebas limitadas, el estilo UA siempre reduce (a través de algún procedimiento que podría no ser normativo) la ventana gráfica. Sin embargo, la ventana gráfica real siempre se mantendrá en un ancho de360px, independientemente del tamaño de la ventana gráfica inicial.<meta name="viewport" content="360px", initial-scale=1.0>, se está haciendo lamin-widthaextend-to-zoomy acoplada con unzoomvalor, esto siempre va a resolver con el valor más grande entre la ventana inicial de ancho dividido por el valor de zoom y elmax-width. En el procedimiento de restricción (sección 7.2), verá que elwidth = MAX(min-width, MIN(max-width, initial-width)). De mis pruebas limitadas, mi inferencia es que cuando lomax-widthespecificado es más pequeño que el ...max-widthvalor es mayor que el ancho de la ventana de visualización inicial, el valor mínimo sería el ancho de la ventana de visualización inicial y el valor máximo será, bueno, elmax-widthvalor. Elextend-to-zoomsemánticamente tiene sentido porque elextend-to-zoomen elmin-widthliteralmente se extiende el valor a la anchura de visualización cuando el zoom es1.0. Y esto se alinea con la respuesta anterior, queextend-to-zoomaltera / extiende / alarga elwidthvalor dado un nivel de zoom.initial-scaleatributo, sino que es una de las formas de producir una diferencia percibida. Revisión de mi primer comentario, el estilo UA también puede acercar (no solo reducir) la ventana gráfica cuando el ancho del dispositivo es mayor que 360px.