放大后布局需重排而非截断
别名: 重排 · 放大截断 · text wrap on scale
概念解释
字跟着用户的设置变大之后,原来一行能装下的句子不再能装下。接下来只有两种诚实的反应:让多出来的字折到下一行,盒子跟着变高——这是重排(reflow);或者在盒子边缘把字切掉、用省略号代替——这是截断。动态字体下,截断是在用丢失内容来假装布局没被打扰。放大的目的是把字读完,切掉等于把目的取消。
截断作为一种有意的省略手段,属于另一组问题。这里只谈:字因用户设置而变长时,默认动作必须是重排,不能是切。
机制
字号上升,每行字符数下降,行数上升。这是同一段文在新的行长下重新折行,和窗口变窄时发生的事是同一类几何。布局若允许高度随内容生长,折行只是多几行,信息还在。布局若把溢出当成错误来藏——overflow: hidden、单行省略、固定行数的裁切——多出来的字进入不可见区。用户专门把字调大,看见的内容反而变少,设置和结果反号。
重排会改动页面的垂直节奏:卡片变高、列表变长、一屏装下的块变少。这不是副作用,是放大被真正执行之后的形状。去压制这个形状(为了「还是一屏四张卡」去切文案),就是在视觉整洁和可读之间选了整洁,并且把选择权从用户手里拿走。
有些截断会连辅助技术一起骗过:屏幕上看见省略,朗读却读全文,或反过来。那是截断怎么被暴露的问题。动态字体这一层更先:根本不该因为字大了就走到截断。
边界
导航标题、表格极窄的列、徽章里的计数,物理上装不下完整句,重排会拆掉组件。那些地方的省略是组件类型带来的,要另给完整阅读的入口,而不是当作「放大就可以切」的先例。动画中的标签、地图钉上的短名,重排会和运动或锚点冲突,需要单独设计。用户把字调小、一行反而装得更多时,重排同样发生(行数减少),不要只在放大方向上做折行、缩小方向上留着大片空白当「设计」。
怎么落地
- 可阅读的句子、说明、列表项,默认多行折行,高度随内容。不要在这些元素上开单行省略来「保行数」。
- 把
hidden溢出和省略号当成字号放大时的禁区,除非这个组件本来就是靠省略工作的短槽,并且另有完整入口。 - 接受一屏里卡片变少。用可滚动来消化变高,而不是用切字来消化。
- 把系统字号调大,看原先完整的句子是否仍完整。出现省略号、半个字、或必须横向拖才能读完,就是用截断回答了放大。