F4.09.2reflow设计

放大后布局需重排而非截断

别名: 重排 · 放大截断 · text wrap on scale

概念解释

字跟着用户的设置变大之后,原来一行能装下的句子不再能装下。接下来只有两种诚实的反应:让多出来的字折到下一行,盒子跟着变高——这是重排(reflow);或者在盒子边缘把字切掉、用省略号代替——这是截断。动态字体下,截断是在用丢失内容来假装布局没被打扰。放大的目的是把字读完,切掉等于把目的取消。

截断作为一种有意的省略手段,属于另一组问题。这里只谈:字因用户设置而变长时,默认动作必须是重排,不能是切。

机制

字号上升,每行字符数下降,行数上升。这是同一段文在新的行长下重新折行,和窗口变窄时发生的事是同一类几何。布局若允许高度随内容生长,折行只是多几行,信息还在。布局若把溢出当成错误来藏——overflow: hidden、单行省略、固定行数的裁切——多出来的字进入不可见区。用户专门把字调大,看见的内容反而变少,设置和结果反号。

重排会改动页面的垂直节奏:卡片变高、列表变长、一屏装下的块变少。这不是副作用,是放大被真正执行之后的形状。去压制这个形状(为了「还是一屏四张卡」去切文案),就是在视觉整洁和可读之间选了整洁,并且把选择权从用户手里拿走。

有些截断会连辅助技术一起骗过:屏幕上看见省略,朗读却读全文,或反过来。那是截断怎么被暴露的问题。动态字体这一层更先:根本不该因为字大了就走到截断。

边界

导航标题、表格极窄的列、徽章里的计数,物理上装不下完整句,重排会拆掉组件。那些地方的省略是组件类型带来的,要另给完整阅读的入口,而不是当作「放大就可以切」的先例。动画中的标签、地图钉上的短名,重排会和运动或锚点冲突,需要单独设计。用户把字调小、一行反而装得更多时,重排同样发生(行数减少),不要只在放大方向上做折行、缩小方向上留着大片空白当「设计」。

怎么落地

  • 可阅读的句子、说明、列表项,默认多行折行,高度随内容。不要在这些元素上开单行省略来「保行数」。
  • hidden 溢出和省略号当成字号放大时的禁区,除非这个组件本来就是靠省略工作的短槽,并且另有完整入口。
  • 接受一屏里卡片变少。用可滚动来消化变高,而不是用切字来消化。
  • 把系统字号调大,看原先完整的句子是否仍完整。出现省略号、半个字、或必须横向拖才能读完,就是用截断回答了放大。

延伸

  • 同组F4.09.1 用户字号设置必须被尊重 · F4.09.3 固定高度容器与动态字号直接冲突
  • 相邻F4.10 文本截断与省略 · F4.16 动态字体与用户字号
  • 站内检索reflow · Dynamic Type · text wrap · overflow

同组卡片

快捷操作

分享

分享当前页面

ios_share

https://hci.top/zh/handbook/F4.09.2