Прежде чем мы углубимся в то, что вы спрашиваете, давайте немного рассмотрим, почему в первую очередь существует метатег 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
.
Так в чем же разница? По существу, нет . Оба они делают то же самое. Надеюсь, мое объяснение поможет ;-) Если что-то не так, скажите мне.