浏览器缩放在用户眼里是「字变大」,到了样式表那边,则是视口的 CSS 像素宽度变窄了。1280 宽的窗口开到 150%,按 1280 ÷ 1.5 算只剩 853 左右,再扣掉滚动条还要少一点。很多后台和文档站的断点刚好卡在这一段。结果桌面布局突然切成平板布局,或者固定宽度的侧栏把正文挤成一条窄缝,表格横着撑出屏幕。开发机上一直是 100%,这些情况平时很难看到。
两条可以拿来当基准的标准
WCAG 2.2 里跟缩放直接相关的是 1.4.4 和 1.4.10,W3C 的 Understanding 文档把测法写得很细。
1.4.4 调整文字大小:除了字幕和文字图片,文字不借助辅助技术放大到 200% 时,不能丢内容、丢功能。Understanding 文档还补了一句,缩放机制在 100% 到 200% 之间有中间档位的话,每一档都不能出问题。150% 正好在这个区间里。这一档要是有内容被挤没、被遮住,或者按钮点不到,就已经不符合 1.4.4 了,不用等到 200% 才去测。
1.4.10 回流:内容在宽度相当于 320 CSS 像素时,不需要横竖两个方向都滚动也能看全、能操作。文档的注释说,320 CSS 像素相当于 1280 宽的视口放大到 400%。窗口不一定是 1280,文档也举了别的情况:窗口停靠在半边屏、视口 960 CSS 像素时,放大到 300% 同样是 320。文档里还有个细节:1280×1024 的屏幕放大到 400%,浏览器要画竖向滚动条,实际视口只有 318 像素宽。所以测的时候差一两个像素很正常,别把 320 当成卡死的数字。
回流有例外:数据表格、地图、示意图、视频、需要常驻工具栏的界面,这些本身就需要二维布局,可以两个方向滚。可例外只管那一块。表格前面的标题、搜索框和后面的分页都不算例外,表格下面的段落也必须正常折行。
测的时候看哪些地方
- 断点用 em 还是 px 有区别。媒体查询里的 em 按浏览器初始字号算,不受页面样式影响。用户只调了默认字号、没动缩放时,em 断点会跟着变,px 断点不会。两种都试一下,看哪种更符合你们的预期。
- 固定侧栏要想好什么时候收起。Understanding 文档建议,视口变小以后把 sticky 或 fixed 的元素改成静态定位,或者让用户能手动收起来。不然这类元素会挡住正文,也可能挡住获得焦点的元素。
- 表格包一层自己的滚动容器,让横向滚动只出现在表格里,别让整页一起横滚。
- 代码块的缩进有含义,可以在块内横滚。普通段落、长 URL、长串 token 要能断行。
- 图片和视频加上
max-width: 100%。文档专门举过一个例子:视频没加这条,把整页撑出了横向滚动条。视频属于例外,这种情况仍算通过,可用户看到横向滚动条,会以为右边还有别的内容,白找一趟。
.layout {
display: grid;
grid-template-columns: 16rem minmax(0, 1fr);
}
@media (max-width: 60em) {
.layout {
grid-template-columns: minmax(0, 1fr);
}
.sidebar {
position: static;
}
}
.table-wrap,
pre {
overflow-x: auto;
}
img,
video {
max-width: 100%;
height: auto;
}
minmax(0, 1fr) 用来防止网格列被里面的长内容撑宽。不写的话,一行长代码就能把整列顶出去。
实际测的时候,在 1280 宽的窗口里把缩放依次调到 125%、150%、175%、200%,最后到 400%,每一档都看一眼:有没有横向滚动条,侧栏是不是压住了正文,按钮和输入框的文字有没有被截断。也可以直接用开发者工具把视口宽度设成 320 来测回流。
滚动条改细以后鼠标点不中,属于目标尺寸的问题,跟缩放和回流分开测更清楚。
你们的回归测试里有缩放这一项吗,一般测到多少倍?