Antes de profundizar en lo que está preguntando, repasemos un poco sobre por qué viewport
existe la metaetiqueta en primer lugar. Esto es lo que he reunido.
¿Por qué necesitamos la viewport
etiqueta?
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 640px
podría tener un bloque inicial que contiene 980px
. En este caso, el bloque contenedor inicial se reduce para 640px
que pueda encajar en la pantalla del móvil. Este 640px
ancho (ancho de pantalla) es lo que se llama initial-width
de la ventana gráfica que será pertinente para nuestra discusión.
Entonces ... ¿Por qué necesitamos esta viewport
etiqueta? 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 viewport
etiqueta, 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 viewport
etiqueta también puede cambiar la altura de la ventana gráfica real, no solo el ancho
viewport
etiqueta width
El width
en una viewport
etiqueta se traduce max-width
en la @viewport
regla. Cuando declara el width
as device-width
, se traduce 100%
en la @viewport
regla. El valor porcentual se resuelve en función initial-width
de la ventana gráfica. Entonces, si todavía estamos usando el ejemplo anterior, max-width
se resolverá a un valor de 640px
. Como has descubierto, esto solo especifica el max-width
. El min-width
será 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-zoom
valor de la hoja de estilo UA es 5.0
y initial-width
es 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 5x
el 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-width
y 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 width
atributo) primero. (Asumiremos que el initial-width
de la ventana gráfica es 640px
).
width
no se establece, esto da como resultado max-width
y min-width
estar extend-to-zoom
en la @viewport
regla.
initial-scale
es 1.0
. Esto significa que el zoom
valor también es1.0
- Vamos a resolver
extend-to-zoom
. Pasos:
extend-zoom = MIN(zoom, max-zoom)
. La MIN
operación resuelve el valor que no es auto
. Aquí zoom
está 1.0
y max-zoom
está auto
. Esto significa que extend-zoom
es1.0
extend-width = initial-width / extend-zoom
. Esto es facil; divide 640 entre 1. Obtienes extend-width
es igual a640
- Como
extend-zoom
no es auto
, saltaremos al segundo condicional. max-width
es extend-to-zoom
, de hecho , esto significa que max-width
se establecerá en extend-width
. Así,max-width = 640
min-width
es también extend-to-zoom
, esto significa establecer min-width
en max-width
. Obtenemosmin-width = 640
- Después de resolver los
auto
extend-to-zoom
valores no (es decir, los ) para max-width
y min-width
. Podemos proceder al siguiente procedimiento . Debido a que min-width
o max-width
no es auto
, vamos a utilizar la primera if
en el procedimiento, estableciendo así el área de visualización efectiva inicial width
a MAX(min-width, MIN(max-width, initial-width))
, lo que equivale a MAX(640, MIN(640, 640))
. Esto se resuelve 640
para su vista real inicialwidth
- Pasando al siguiente procedimiento . En este paso,
width
no lo es auto
. El valor no cambia y terminamos con la ventana gráfica real width
de640px
Hagamos lo primero.
width
está configurado, esto da como resultado max-width
ser 100%
( 640px
en nuestro caso) y min-width
estar extend-to-zoom
en la @viewport
regla.
initial-scale
es 1.0
. Esto significa que el zoom
valor también es1.0
- Vamos a resolver
extend-to-zoom
. Si sigue los pasos cuidadosamente (casi lo mismo que arriba), terminará con un max-width
de 640px
y un min-width
de 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!viewport
atributo 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-width
aextend-to-zoom
y acoplada con unzoom
valor, 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-width
especificado es más pequeño que el ...max-width
valor 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-width
valor. Elextend-to-zoom
semánticamente tiene sentido porque elextend-to-zoom
en elmin-width
literalmente 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-zoom
altera / extiende / alarga elwidth
valor dado un nivel de zoom.initial-scale
atributo, 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.