现代软换行、孤字终结与零 Tracking 铁律
text-wrap: pretty 孤字终结、balance 标题平衡、禁止硬编码换行与正文零 tracking 铁律。
现代软换行、孤字终结与零 Tracking 铁律
文本排版的品质体现在最细微的断行与字距处。粗暴的手动换行和随意调整字距是破坏现代界面的隐形杀手。
孤字(Orphans)的视觉缺陷
在卡片或弹窗的描述文本中,经常出现最后一行的末尾孤零零落着一个单字或一个标点。 这种孤字(Orphan)打破了段落底部的视觉重量平衡,导致右下角出现难看的空洞,极显业余。
CSS 原生软换行:pretty 与 balance
按 MDN 的兼容数据,balance 从 Chrome 114、Firefox 121、Safari 17.5 起可用;pretty 从 Chrome 117、Safari 26 起可用,Firefox 尚未支持。不支持的浏览器按普通 wrap 断行,不会出错。TuffEx 组件目前没有声明 text-wrap;本站文档的页头(DocHero)是这样用的:
// apps/nexus/app/components/docs/DocHero.vue(节选)
// 标题:让各行宽度尽量接近
.docs-hero__title {
text-wrap: balance;
}
// 描述段落:避免末行只剩一两个字
.docs-hero__desc {
text-wrap: pretty;
}
text-wrap: balance:浏览器计算各行字符分布,生成对称的倒梯形或居中平衡排版;Chrome 只对 6 行以内的文本生效。text-wrap: pretty:专门检测段末孤字。一旦发现孤字,自动从上一行拉下倒数第二个词合并收尾。
严禁硬编码插入换行符
严禁在动态文案中随意注入 <br> 或 \n!
硬换行符将“当前设备宽度的排版”硬编码进了数据流。一旦用户缩放视窗,硬换行符会在意想不到的位置提前断行,造成混乱断裂。一切换行必须交由排版引擎的软换行(Soft Break)算法处理。
正文零 Tracking 铁律与特例豁免
顶级字体厂商耗费数年校对字体字偶间距(Kerning Pairs)。在普通正文上声明 letter-spacing: 1px 并不会去掉字偶间距,而是在字偶间距之外,给相邻字符之间再统一加 1px,把厂商调好的字距节奏整体冲淡;CSS Text 规范还规定,字距不为 0 时浏览器不应再应用 fi、fl 这类可选连字。
TuffEx 规定:正文严禁触碰 letter-spacing。仅允许在以下三种极端场景豁免:
- ≤11px 全大写微标签:极小全大写字母需要微扩字距防糊。如
TxSidebarNav分组标题 10.5px、0.08em,TxSelect分组标题 11px、0.06em,TxCodeBlock语言标签 11px、0.04em;TxTag的 11px 标签也留了0.05em。 - ≥17px 标题与展示数字:大字号需要微负字距收紧,统一取
-0.01em。如TxInsightMetric数值与TxBlowDialog标题 17px,TxModal、TxBottomDialog标题 18px,TxStatCard数值 28px。 - 用户头像居中缩写(
TxAvatar0.02em):此时字母属于几何图案,非阅读文本。
示例加载中...