Перш ніж ми поглибимося у те, що ви запитуєте, давайте трохи розберемося, чому viewport
мета-тег існує в першу чергу. Ось що я зібрав.
Для чого нам потрібен viewport
тег?
Вікно перегляду - це область, де можна побачити веб-вміст. Зазвичай відображена сторінка (веб-вміст) більша за вікно перегляду. Як результат, ми зазвичай використовуємо смуги прокрутки, щоб побачити прихований вміст (тому що вікно перегляду не може відображати все). Цитується з модуля адаптації пристрою CSS рівень 1 :
Вузький вікно перегляду є проблемою для документів, розроблених так, щоб вони добре виглядали в настільних браузерах. Результат полягає в тому, що постачальники мобільних браузерів використовують фіксований початковий розмір блоку, який відрізняється від розміру вікна перегляду та близький до типового вікна браузера настільних пристроїв. Окрім прокручування чи панорамування, масштабування часто використовується для переходу між оглядом документа та збільшенням масштабів певних ділянок документа для читання та взаємодії з ними.
У мобільних пристроях (та інших менших пристроях) початковий блок, що містить , зазвичай більший, ніж вікно перегляду. Наприклад, мобільний пристрій, який має ширину екрану, 640px
може мати початковий блок, що містить 980px
. У цьому випадку початковий блок, що містить, зменшується, щоб 640px
він міг поміститися в екрані мобільного пристрою. Ця 640px
ширина (ширина екрану) - це те, що називається initial-width
вікном перегляду, яке буде доречним для нашої дискусії.
Отже .... Навіщо нам потрібен цей viewport
тег? Ну а зараз у нас є медіа-запити, які дозволяють нам розробляти мобільні пристрої. Однак цей медіа-запит залежить від фактичної ширини вікна перегляду. На мобільних пристроях агент користувача автоматично стилізує початковий розмір вікна перегляду на інший фіксований (зазвичай більший, ніж початковий розмір вікна перегляду). Отже, якщо ширина вікна перегляду мобільного пристрою встановлена, правила CSS, які ми використовуємо в медіа-запитах, не виконуватимуться просто тому, що ширина огляду ніколи не змінюється. Використання viewport
тега, ми можемо контролювати в фактичної ширини вікна перегляду (після того , як стиль в UA). Цитується з MDN :
Однак цей механізм не настільки хороший для сторінок, оптимізованих для вузьких екранів за допомогою медіа-запитів - якщо, наприклад, віртуальний вікно перегляду становить 980 пікселів, медіа-запити, що починаються з 640 пікселів або 480 пікселів або менше, ніколи не будуть використовуватися, що обмежує ефективність таких чуйні методи дизайну.
Зауважте, що viewport
тег також може змінювати фактичну висоту вікна перегляду, а не лише ширину
viewport
тегів width
width
У viewport
тезі транслюються max-width
в @viewport
правилах. Коли ви оголошуєте width
як device-width
, це переводиться 100%
в @viewport
правило. Значення відсотків визначається на основі initial-width
вікна перегляду. Отже, якщо ми все ще використовуємо наведений вище приклад, значення max-width
буде вирішено до значення 640px
. Як ви з'ясували, це лише визначає max-width
. min-width
Буде автоматично extend-to-zoom
.
extend-to-zoom
Ваше питання полягало в тому, яке саме значення має розширений масштаб ? З того, що я зібрав, це значення, яке використовується для підтримки вікна перегляду, що розширюється, щоб відповідати зоні перегляду на заданому рівні збільшення. Іншими словами, це значення розміру вікна перегляду, яке змінюється на основі вказаного значення масштабування. Приклад? Враховуючи, що max-zoom
значення таблиці стилів UA є 5.0
і initial-width
є 320px
, <meta name="viewport" content="width=10">
буде дозволено до початкової фактичної ширини 64px
. Це має сенс, тому що якщо пристрій має лише 320 пікселів і його можна 5x
збільшити лише на нормальне значення, то мінімальний розмір вікна перегляду буде таким 320px divided by 5
, що означає показувати лише 64 пікселів одночасно ( а не 10px
тому що для цього знадобиться масштабування 32x!). Це значення буде використано алгоритмом для визначення способу розширення (зміни) min-width
та max-width
значень, які відіграватимуть роль у визначенні фактичної ширини вікна перегляду.
Збираючи все це разом
Отже, по суті, в чому різниця між <meta name="viewport" content="width=device-width, initial-scale=1.0">
і <meta name="viewport" content="initial-scale=1.0">
? Просто повторіть кроки алгоритму ( це і це ). Давайте зробимо останнє (той, що не має width
атрибуту) першим. (Будемо вважати, що initial-width
вікно перегляду є 640px
.)
width
не встановлено, це призводить max-width
і min-width
будучи extend-to-zoom
в @viewport
правилі.
initial-scale
є 1.0
. Це означає, що zoom
значення також є1.0
- Давайте вирішимо
extend-to-zoom
. Кроки:
extend-zoom = MIN(zoom, max-zoom)
. MIN
Операція перетворюється в значення, яке не- auto
. Ось, zoom
є 1.0
і max-zoom
є auto
. Це означає, що extend-zoom
є1.0
extend-width = initial-width / extend-zoom
. Це легко; ділимо 640 на 1. Отримаємо extend-width
дорівнює640
- Оскільки
extend-zoom
це не- auto
, ми перейдемо до другого умовного. max-width
це дійсно extend-to-zoom
, це означає, що max-width
буде встановлено extend-width
. Таким чином,max-width = 640
min-width
Крім того extend-to-zoom
, це означає встановлення min-width
для max-width
. Ми отримуємоmin-width = 640
- Після розв’язання не-
auto
(тобто extend-to-zoom
) значень для max-width
і min-width
. Ми можемо перейти до наступної процедури . Так min-width
чи max-width
ні auto
, ми будемо використовувати перші if
в процедурі, таким чином , встановивши початковий фактичний видовий екран width
до MAX(min-width, MIN(max-width, initial-width))
, який прирівнює MAX(640, MIN(640, 640))
. Це вирішено 640
для вашого початкового фактичного вікна переглядуwidth
- Перехід до наступної процедури . На цьому кроці
width
немає auto
. Значення не змінилося , і ми в кінцевому підсумку з реальним відовомом width
з640px
Зробимо перше.
width
встановлено, це призводить до max-width
бути 100%
( 640px
в нашому випадку) і min-width
бути extend-to-zoom
в @viewport
правилі.
initial-scale
є 1.0
. Це означає, що zoom
значення також є1.0
- Давайте вирішимо
extend-to-zoom
. Якщо ви будете слідувати інструкціям ретельно (майже такий же , як і вище), ви будете в кінцевому підсумку з max-width
з 640px
і min-width
з 640px
.
- Ви, мабуть, зараз можете побачити викрійку. Ми отримаємо фактичну ширину вікна перегляду
640px
.
Так у чому полягає сприймається різниця? По суті немає . Вони обидва роблять те саме. Сподіваюся, моє пояснення допомагає ;-) Якщо все було не так, скажіть мені.
1.0
, але я не впевнений у цьому. У будь-якому випадку, чудова відповідь, дякую!