F4.10.7line clamp versus fixed pixel height设计
多行截断的行数限制需随字号变化重新计算而非固定像素高度
别名: 多行省略 · line-clamp · 行数截断
概念解释
「预告三行」是一个行数承诺,不是一个像素盒子。用 line-clamp 或平台的行数上限,预告会跟着字号长高;用写死的高度再把溢出藏掉,字号一大,三行就变成一行半,半个字被切在盒子沿上。多行截断随字号重算(line clamp versus fixed pixel height)管的是预告块的约束单位:约束应该是行,不是设计稿上量出来的高度。
机制
一行的盒子高度大约是字号乘行高。固定像素高度来自默认字号下的画板,对用户放大字号一无所知。能塞进这个高度的行数是高度除以行盒,向下取整。字号从常规档走到辅助功能最大档,行盒可以翻倍以上,「三行预告」在像素盒子里先变成两行,再变成一行加一截被切掉的字形。有的实现切完连省略号都不画,用户不知道后面还有字。按行数截断的实现会在排完行之后再决定从第几行起丢掉,盒子跟着行数长高,预告的语义——「最多三行」——在字号变化后仍然成立。它不管布局其他部分会不会被顶开,那是容器与动态字号的冲突;这里只论截断计数本身用错了单位。
边界
单行省略跟高度锁死是不同问题:单行通常由宽度触发,不靠像素高来数行。海报、缩略图上盖的标题有时必须钉死在图高里,那是图文叠层的取舍,应换成缩略图专用短标题,而不是假装那是可重排的预告。行数上限本身也会在极大字号下占满整屏,这时该让预告变成可滚动区域或进入全文,而不是偷偷改回像素高。浏览器缩放与系统动态字体都会改行盒,只测其中一种会漏掉另一种。
怎么落地
- 预告块用行数驱动,让块高随字号长;不要用隐藏溢出的固定高度去冒充三行。
- 把系统字号拉到最大档,数每一个被截断的预告还剩几行完整行。目标行数应仍在,或变成带滚动的全文;出现半截字形就算失败。
- 行高与字号一起变时,不要把行数上限写死成「除以 24 像素」。用实际行盒重算。