第2章:视口设置与meta标签

大家好,我是你们的老朋友。今天咱们聊聊移动端适配里最基础、也最容易踩坑的一个东西——viewport meta标签。

说实话,我刚入行那会儿,对这个标签的理解就是「抄就完事了」。直到有一次,一个客户拿着手机说「你这页面怎么字这么小?」,我才意识到——嗯,这东西真不能随便糊弄。

2.1 什么是视口(Viewport)?

先问大家一个问题:你手机浏览器打开一个PC网页,会发生什么?

浏览器会假装自己是个大屏幕,比如980px宽。然后它把整个页面缩小,塞进手机屏幕里。结果呢?字小得跟蚂蚁一样,你得双指放大才能看清。

这个「假装出来的宽度」,就是浏览器的默认视口。不同浏览器不一样:

浏览器 默认视口宽度
iPhone Safari 980px
Android Chrome 980px
BlackBerry 1024px

说白了,浏览器在「骗自己」。它以为屏幕很宽,结果实际物理像素就那么点。这就是为什么我们需要viewport meta标签——告诉浏览器:别装了,按真实尺寸来。

2.2 viewport meta标签详解

这个标签长这样:

<meta name="viewport" content="width=device-width, initial-scale=1.0">

放在<head>里,越早越好。我个人习惯放在title下面、其他meta上面。

它有几个核心属性,我一个个说。

2.2.1 width=device-width

这个属性告诉浏览器:用设备的真实宽度来渲染页面。

举个例子。iPhone 14的物理像素是390px(CSS像素)。如果你写width=390,那也行,但换到iPhone 14 Pro Max(430px)就崩了。

device-width会自动适配不同设备。我在项目中遇到过有人写死width=320的,结果在折叠屏手机上页面直接裂开。所以——

核心原则:永远用 width=device-width,不要写死数值。

2.2.2 initial-scale

这个控制初始缩放比例。1.0就是100%,不缩放。

你可能会想:我都设了width=device-width了,还要这个干嘛?

原因有点绕。有些浏览器(比如老版Safari)在横竖屏切换时,会偷偷改变缩放比例。加上initial-scale=1.0,就是告诉它:别乱动。

<meta name="viewport" content="width=device-width, initial-scale=1.0">

这两个属性通常成对出现。我建议你永远这么写,别省。

2.2.3 user-scalable

这个属性控制用户能不能缩放页面。

<!-- 禁止缩放 -->
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no">

<!-- 允许缩放(默认) -->
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes">

注意:禁止缩放会影响无障碍访问。视障用户可能需要放大才能看清内容。我曾经在一个政府项目中因为禁用了缩放,被用户投诉到甲方那里……从那以后,除非是游戏或特殊交互场景,我一般保留缩放能力。

2.3 其他属性

还有两个属性,虽然不常用,但面试常考:

属性 说明 推荐值
minimum-scale 最小缩放比例 0.5 或 1.0
maximum-scale 最大缩放比例 2.0 或 5.0
<meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=3.0">

为什么要限制?因为有些用户会不小心双指放大,然后页面就回不去了。限制一下,体验会好很多。

2.4 常见问题与避坑

避坑指南1:我曾经在微信内置浏览器里遇到过——明明设了viewport,但页面还是缩放。后来发现是微信的X5内核有自己的一套逻辑。解决方案:在meta后面加一句 user-scalable=no,或者用JS监听touch事件。

避坑指南2:有些同学喜欢写 width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no——四个属性全上。其实没必要。我一般只写前两个,除非有特殊需求。

我的推荐写法:

<meta name="viewport" content="width=device-width, initial-scale=1.0">

简单、干净、够用。如果项目对无障碍有要求,再加个 maximum-scale=3.0

2.5 总结

viewport meta标签,说白了就是告诉浏览器:别自作聪明,按真实尺寸来。核心就三个属性:

  • width=device-width — 适配设备宽度
  • initial-scale=1.0 — 初始不缩放
  • user-scalable — 控制用户缩放(慎用no)

你想想看,移动端适配的第一步就是这个标签。如果它写错了,后面所有的rem、vw、flex布局都是白搭。所以——

嗯,每次新建项目,第一件事就是把这个meta标签怼上去。养成习惯,少走弯路。

下一章我们聊聊「物理像素、逻辑像素与DPR」,到时候你会更清楚为什么device-width在不同手机上表现不一样。咱们下章见。


公众号:蓝海资料掘金营,微信deep3321