J2.02.2two-dimensional scrolling设计研究

放大后不应产生双向滚动

别名: 双向滚动 · 横向滚动 · two-dimensional scrolling

概念解释

文本放大之后,读一段连续正文应当只沿一个方向滚——通常是纵向。既要左右推、又要上下推才能拼完一行,就是双向滚动。失败的不是「出现了滚动条」,而是阅读窗口变成一块要在平面上平移的钥匙孔。低视力用户的可视范围已经很小,再加一条轴,工作记忆里拼句子的成本会陡增。

机制

视口是有限矩形。字变大后若布局仍坚持原来的最小宽度,文档宽度超过视口,纵向滚再叠加整页横向滚。人读行是从左到右再回到下一行行首;横向偏移一旦不归零,下一行要对准就得来回找。这和「某个部件自己内部可以横滑」不是同一件事:表格、代码块、地图可以在局部提供二维平移,只要它不把整页 body 撑出横向滚动。

一个英雄图、一条不换行的宽表、一个 min-width: 1200px 的栅格,就足以让整页变成二维画布。字还在、也没被裁切,但获取方式坏了——所以「没丢内容」过了,仍可能在这一条上失败。更高倍数下改成单列、避免靠横滑读正文,是另一组更严的重排要求;本组先卡住「检查点上不要整页双轴」。

怎么研究

放大到 200% 后比较 scrollWidthclientWidth,并实际读完一篇段落:中途要不要左右平移。把「部件级横滑」和「文档级横滑」分开记。

自变量:放大倍数、页面最小宽度、是否存在不收缩的宽部件。 因变量:文档是否出现横向滚动、读完一段需要的平移次数、用户是否丢失行首。

键盘用户没有触控板惯用的斜向拖,更暴露双轴代价。不要用「把窗口拉得很宽」来消除失败——检查视口应接近产品声明的最小宽度。

边界

数据表、乐谱、地图、绘图画布作为明确的二维介质,允许在自身盒子里双轴移动,前提是周围正文仍单轴。移动端本来就窄,放大后更容易整页横溢,不能拿「手机本来就能横滑」当合格。用户主动把窗口缩到极窄,超出声明视口的,不算产品失败。浏览器整体缩放与只放字号两条路径会把不同的横向溢出暴露出来,要分开测,但判据同为「读正文不要双轴」。

怎么落地

  • 栏宽用 % / max-width: 100% / 可折列,不要给整页设死的大 min-width
  • 必须很宽的部件(表、代码、画布)包在自己的滚动盒里,不要让它撑开 body
  • 长 URL、不换行代码、白空格预排要允许折行或只在部件内横滑。
  • 验证:在声明的最小视口把文本放到 200%,正文段落从头读到尾,手不准左右推。整页出现横向滚动条即失败;仅表格内部有横滑则记下部件名,不判整页失败。

延伸

  • 同组J2.02.1 放大后内容不得丢失或截断 · J2.02.3 固定高度容器是主要失败点
  • 相邻J2.11 文本缩放与重排 · J2.07 低视力与屏幕放大
  • 站内检索two-dimensional scrolling · text resize · horizontal overflow

同组卡片

快捷操作

分享

分享当前页面

ios_share

https://hci.top/zh/handbook/J2.02.2