学习 meta:viewport

在移动设备上, 布局视口通常比屏幕的逻辑尺寸要大. 为了适应屏幕的大小, 移动设备浏览器会缩放网页内容. 但是, 有时候我们希望网页的布局视口和视觉视口大小相同 (此时文档对象的宽度和屏幕宽度相同), 这时候就需要使用 meta 标签来控制.

关于 Viewport

属性 & 描述 & 取值

属性描述
width设置布局视口的宽度- 正整数
- device-width
height设置布局视口的高度 (不被任何浏览器使用)- 正整数
- device-height
initial-scale设置页面的初始缩放比例[0.0, 10.0]
minimum-scale设置页面的最小缩放比例[0.0, 10.0]
maximum-scale设置页面的最大缩放比例[0.0, 10.0]
user-scalable是否允许用户缩放页面- yes/no
- 默认为yes
viewport-fit控制页面在视觉视口中的显示方式- auto: 不影响初始布局
- contain: 布局视口被放缩使得屏幕能够展示完整
- cover: 布局视口被放缩使得视觉视口被填充

关于 minimum-scale, initial-scale, maximum-scale

  1. 要求 minimum-scale <= initial-scale <= maximum-scale, 否则为未定义行为.
  2. MDN 中描述称 iOS10+ 默认忽略这些属性, 但实际测试中仍然生效.

使用场景

iOS Safari 中点击输入框时, 页面会自动缩放. 这是因为 iOS Safari 会自动缩放页面以适应输入框的大小. 为了避免这种情况, 可以通过使用 user-scalable=no 来禁止用户缩放页面. 同时为了避免页面被缩放, 可以设置 initial-scale=1.0maximum-scale=1.0.

<!doctype html>
<html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport"
              content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, user-scalable=no">
        <meta http-equiv="X-UA-Compatible" content="ie=edge">
        <title>My Document</title>
    </head>
    <body>
        <p>Focus the input box below and see if the page zooms in.</p>
        <input type="text">
    </body>
</html>

References