Prima di approfondire ciò che stai chiedendo, esaminiamo un po 'perché il viewport
meta tag esiste in primo luogo. Ecco cosa ho raccolto.
Perché abbiamo bisogno del viewport
tag?
Una finestra è un'area in cui è possibile visualizzare il contenuto Web. Di solito, la pagina renderizzata (contenuto web) è più grande della finestra. Di conseguenza, di solito utilizziamo le barre di scorrimento per visualizzare il contenuto nascosto (poiché il viewport non può visualizzare tutto). Citato dal modulo adattamento dispositivo CSS livello 1 :
La vista stretta è un problema per i documenti progettati per apparire bene nei browser desktop. Il risultato è che i fornitori di browser per dispositivi mobili utilizzano un'iniziale fissa contenente una dimensione di blocco diversa dalla dimensione della finestra e vicina a quella di una tipica finestra del browser desktop. Oltre allo scorrimento o alla panoramica, lo zoom viene spesso utilizzato per passare da una panoramica del documento e ingrandire determinate aree del documento da leggere e interagire.
Nei dispositivi mobili (e altri dispositivi più piccoli), il blocco contenitore iniziale è generalmente più grande della finestra. Ad esempio, un dispositivo mobile con una larghezza dello schermo di 640px
potrebbe avere un blocco contenente iniziale di 980px
. In questo caso, il blocco contenitore iniziale viene ridotto in 640px
modo da poterlo adattare allo schermo mobile. Questa 640px
larghezza (larghezza dello schermo) è ciò che viene chiamato initial-width
del viewport che sarà pertinente alla nostra discussione.
Quindi .... Perché abbiamo bisogno di questo viewport
tag? Bene, al giorno d'oggi, abbiamo query multimediali che ci consentono di progettare per dispositivi mobili. Tuttavia, questa query multimediale dipende dalla larghezza effettiva della finestra. Nei dispositivi mobili, l'agente utente imposta automaticamente la dimensione della finestra iniziale su una diversa fissa (di solito più grande della dimensione della finestra iniziale). Pertanto, se la larghezza del viewport di un dispositivo mobile è fissa, le regole CSS che utilizziamo nelle query multimediali non verranno eseguite semplicemente perché la larghezza del viewport non cambia mai. Usando il viewport
tag, possiamo controllare la larghezza effettiva del viewport (dopo essere stato disegnato da UA). Citato da MDN :
Tuttavia, questo meccanismo non è così buono per le pagine che sono ottimizzate per schermi stretti utilizzando le query multimediali - ad esempio se la finestra virtuale è 980px, le query multimediali che entrano in 640px o 480px o meno non verranno mai utilizzate, limitando l'efficacia di tale tecniche di progettazione reattiva.
Si noti che il viewport
tag può modificare anche l'altezza effettiva della finestra, non solo la larghezza
viewport
del tag width
Il width
in un viewport
tag è tradotto per max-width
la @viewport
regola. Quando si dichiara width
as device-width
, viene tradotto 100%
nella @viewport
regola. Il valore percentuale viene risolto in base al valore initial-width
della finestra. Quindi, se stiamo ancora usando l'esempio sopra, la max-width
risoluzione si risolverà in un valore di 640px
. Come hai scoperto, questo specifica solo il max-width
. Lo min-width
sarà automaticamente extend-to-zoom
.
extend-to-zoom
La tua domanda era: qual è esattamente il valore di extender-zoom ? Da quello che ho raccolto, è il valore utilizzato per supportare il viewport che si estende per adattarsi all'area di visualizzazione a un determinato livello di zoom. In altre parole, è un valore della dimensione della finestra che cambia in base al valore di zoom specificato. Un esempio? Dato che il max-zoom
valore del foglio di stile UA è 5.0
e initial-width
è 320px
, <meta name="viewport" content="width=10">
si risolverà in una larghezza effettiva iniziale di 64px
. Questo ha senso perché se un dispositivo ha solo 320 px e può essere ingrandito solo 5x
il valore normale, allora la dimensione minima del viewport sarebbe 320px divided by 5
, il che significa mostrare solo 64 px alla volta ( e non 10px
perché ciò richiederebbe lo zoom 32x!). Questo valore verrà utilizzato dall'algoritmo per determinare come estendere (modificare) i valori min-width
e max-width
, che avranno un ruolo nel determinare la larghezza effettiva della finestra.
Mettere tutto insieme
Quindi, in sostanza, qual è la differenza tra <meta name="viewport" content="width=device-width, initial-scale=1.0">
e <meta name="viewport" content="initial-scale=1.0">
? Ripeti semplicemente i passaggi dell'algoritmo ( questo e questo ). Facciamo prima quest'ultimo (quello senza width
attributo). (Supponiamo che sia initial-width
il viewport 640px
.)
width
non è impostato, ciò si traduce in max-width
ed min-width
essere extend-to-zoom
nella @viewport
regola.
initial-scale
lo è 1.0
. Questo significa che lo zoom
è anche il valore1.0
- Let determinazione
extend-to-zoom
. passi:
extend-zoom = MIN(zoom, max-zoom)
. L' MIN
operazione si risolve nel valore che non è auto
. Ecco, zoom
è 1.0
ed max-zoom
è auto
. Questo significa che lo extend-zoom
è1.0
extend-width = initial-width / extend-zoom
. Questo è facile; dividere 640 per 1. Ottieni extend-width
è uguale a640
- Poiché
extend-zoom
non è- auto
, passeremo al secondo condizionale. max-width
è davvero extend-to-zoom
, questo significa che max-width
sarà impostato su extend-width
. Così,max-width = 640
min-width
è anche extend-to-zoom
, questo significa impostare min-width
su max-width
. Noi abbiamomin-width = 640
- Dopo aver risolto i
auto
extend-to-zoom
valori non (cioè i ) per max-width
e min-width
. Possiamo procedere alla procedura successiva . Perché min-width
o max-width
no auto
, useremo il primo if
nella procedura, impostando così il viewport effettivo iniziale width
su MAX(min-width, MIN(max-width, initial-width))
, che equivale a MAX(640, MIN(640, 640))
. Questo si risolve in 640
per la finestra effettiva inizialewidth
- Passiamo alla procedura successiva . In questo passaggio,
width
non lo è auto
. Il valore non viene modificato e si finisce con la visualizzazione effettiva width
di640px
Facciamo il primo.
width
è impostato, questo si traduce in max-width
essere 100%
( 640px
nel nostro caso) ed min-width
essere extend-to-zoom
nella @viewport
regola.
initial-scale
lo è 1.0
. Questo significa che lo zoom
è anche il valore1.0
- Let determinazione
extend-to-zoom
. Se segui attentamente i passaggi (quasi come sopra), finirai con un max-width
di 640px
e un min-width
di 640px
.
- Probabilmente puoi vedere lo schema ora. Otterremo la larghezza effettiva del viewport di
640px
.
Quindi qual è la differenza percepita? In sostanza nessuno . Entrambi fanno la stessa cosa. Spero che la mia spiegazione mi aiuti ;-) Se qualcosa non va, dimmelo.
1.0
, ma non sono sicuro su questo. Comunque, ottima risposta, grazie!