F4.10.7line clamp versus fixed pixel height设计

多行截断的行数限制需随字号变化重新计算而非固定像素高度

别名: 多行省略 · line-clamp · 行数截断

概念解释

「预告三行」是一个行数承诺,不是一个像素盒子。用 line-clamp 或平台的行数上限,预告会跟着字号长高;用写死的高度再把溢出藏掉,字号一大,三行就变成一行半,半个字被切在盒子沿上。多行截断随字号重算(line clamp versus fixed pixel height)管的是预告块的约束单位:约束应该是行,不是设计稿上量出来的高度。

机制

一行的盒子高度大约是字号乘行高。固定像素高度来自默认字号下的画板,对用户放大字号一无所知。能塞进这个高度的行数是高度除以行盒,向下取整。字号从常规档走到辅助功能最大档,行盒可以翻倍以上,「三行预告」在像素盒子里先变成两行,再变成一行加一截被切掉的字形。有的实现切完连省略号都不画,用户不知道后面还有字。按行数截断的实现会在排完行之后再决定从第几行起丢掉,盒子跟着行数长高,预告的语义——「最多三行」——在字号变化后仍然成立。它不管布局其他部分会不会被顶开,那是容器与动态字号的冲突;这里只论截断计数本身用错了单位。

边界

单行省略跟高度锁死是不同问题:单行通常由宽度触发,不靠像素高来数行。海报、缩略图上盖的标题有时必须钉死在图高里,那是图文叠层的取舍,应换成缩略图专用短标题,而不是假装那是可重排的预告。行数上限本身也会在极大字号下占满整屏,这时该让预告变成可滚动区域或进入全文,而不是偷偷改回像素高。浏览器缩放与系统动态字体都会改行盒,只测其中一种会漏掉另一种。

怎么落地

  • 预告块用行数驱动,让块高随字号长;不要用隐藏溢出的固定高度去冒充三行。
  • 把系统字号拉到最大档,数每一个被截断的预告还剩几行完整行。目标行数应仍在,或变成带滚动的全文;出现半截字形就算失败。
  • 行高与字号一起变时,不要把行数上限写死成「除以 24 像素」。用实际行盒重算。

延伸

  • 同组F4.10.1 截断位置决定剩余信息是否可用 · F4.10.2 中段省略保留首尾特征 · F4.10.3 被截断内容需有完整查看的入口 · F4.10.4 关键决策信息(价格、警告)不应被截断 · F4.10.5 截断后的文本仍需在辅助技术中可读取完整内容 · F4.10.6 中文单字信息密度高,同样字符数截断丢失的信息更多
  • 相邻F4.09 动态字体 · F4.16 动态字体与用户字号 · F4.02 行高
  • 站内检索line-clamp · Dynamic Type · multiline truncation

同组卡片

快捷操作

分享

分享当前页面

ios_share

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