Перш ніж ми поглибимося у те, що ви запитуєте, давайте трохи розберемося, чому 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, але я не впевнений у цьому. У будь-якому випадку, чудова відповідь, дякую!