通用之网

2.4 行距

屏幕阅读的行距设定:无单位的 CSS line-height、WCAG 1.4.12 对容忍 1.5 行高的要求,以及为什么合适的数值取决于行长。

9 min read

本页面借助 AI 辅助翻译。英文原文为权威版本。

行与行之间的空间——印刷术语中的行距(leading),CSS 中的 line-height——是屏幕排版中影响最深远的设置之一。它的职责是导航性的:行间足够的留白让眼睛读完一行、完成回到左边距的长距离回扫,并准确落在下一行上,而不是重读当前行或者跳行。2005 年版推荐约为字号的 140%,并指出浏览器 100–120% 的默认值过紧,对低视力读者尤甚。这条建议经受住了时间的考验;如果说有什么变化,那就是实践与标准已略微走到了它前面。

2005 年以来的变化

最初约 1.4 的数字在当时是超前的,如今则处在主流实践的保守一端。2026 年,排版良好的网站正文通常在 1.4 到 1.6 之间,而无障碍底线已被正式化:WCAG 成功准则 1.4.12"文本间距"(AA 级)要求内容在用户把行高设为字号的 1.5 倍时不丢失内容或功能,而更早的 1.4.8"视觉呈现"(AAA 级)则直接要求段落内的行距至少为 1.5。实际的解读是:1.5 不是愿景,而是你的布局至少必须容忍的数值——而且对多数正文排版而言,它就是一个好的默认值。

三段占位行分别以 1.2、1.5、2.0 的行高排布——过紧的行相互拥挤,1.5 是正文默认值,2.0 则行与行漂离。

第二个变化是行距的指定方式。2005 年,设计师用像素或百分比设置行距。现代 CSS 实践的态度是明确的:使用无单位值(line-height: 1.5,而不是 24px 或 150%)。区别在于继承。无单位值作为比例被继承,并针对每个元素自身的字号重新计算;像素或百分比值只计算一次,然后作为固定长度被继承。在页面 body 上设置 line-height: 24px,嵌套其中的 32px 标题就会渲染出相互重叠的行。无单位的 line-height 让整个级联正确地缩放——这也是用户放大文字时布局保持完好的原因。

第三,布局本身也变了。固定高度的文本容器在 2005 年司空见惯,如今是 1.4.12 要求的头号受害者:一个按行高 1.3 恰好装下三行文字的盒子,在读者覆盖为 1.5 时就会裁切内容。承载文本的容器应当由内容决定尺寸,需要下限时使用 min-height,绝不使用固定高度。

行距与行长是同一个决定

对原章最重要的改进在于:行距不能孤立选择。行距与行长相互依存,机制就是回扫。在短行上,眼睛向左的回程只是短短一跳,落点出错很少见,因此较紧的行距是可以容忍的。在长行上,回扫路途漫长且不精确;宽裕的行距为眼睛提供了更宽的"着陆带",大幅降低"重行"——重读同一行——的概率。这是易读性研究由来已久的发现,从印刷研究一路观察至今:可接受的行距随行长增大。

落到实践:45 字符的侧栏注记在 1.4 下可以读得很舒服;75 字符的文章栏则需要 1.6 或更高。如果布局迫使行变长,就用行距补偿。更好的做法是约束行长(下一章的主题),让行距得以停留在舒适的中间地带。

原版提到的字体差异依然适用。line-height 按字号计算,但读者感知到的是一行文字的视觉体量与下一行之间的白色通道——它取决于 x字高、升部与降部的长度以及笔画粗细。像 Verdana 这样 x字高很大的字体把字身撑得更满,在同一 line-height 下读起来比小 x字高的字体更紧。颜色深、笔画粗或字宽窄的字体同样需要更多空气。评判行距要看排好的段落,而不是迷信一个数字。

标题另当别论

1.4–1.6 的指导适用于连续正文。标题遵循相反的逻辑:在大字号下,按比例的行高会在换行之间留下巨大的空隙,在视觉上把标题从自身割裂开。多行标题以紧排为佳——通常 1.1 到 1.25,特大展示字号可趋近 1.0。由于无单位 line-height 以比例继承,标题样式应显式设置自己更紧的值,而不是继承正文行距。WCAG 的间距要求针对的是文本块而非展示性大标题,但用户应用覆盖时标题同样不得被裁切——这也是避免固定高度 hero 容器的又一个理由。

再补两点。第一,两个方向的极端都有害:原版对行距过大的警告依然成立——漂浮在过多留白中的行会让寻找下一行更加困难,并把段落作为一个整体割裂开;超过约 2.0,正文就开始散架。第二,界面也是文本:按钮、表单标签和导航需要足够合理的行高来经受换行与用户覆盖,而用假定单行文本永不换行的技巧来居中 UI 文字的常见习惯,是反复出现的 1.4.12 失败。

在 CSS 中

body { line-height: 1.5; }      /* unitless — scales with size */
h1, h2 { line-height: 1.15; }   /* display sizes want less */
figcaption { line-height: 1.4; }

/* Longer measures need more leading: */
.wide-column { line-height: 1.6; }

建议

  • 正文的行高默认设为 1.5;根据字体与行长在约 1.4–1.7 范围内调整。
  • 始终使用无单位的 line-height 值,让比例正确地继承与缩放。
  • 行长增加时加大行距;长行需要更多空气来完成回扫。
  • 标题收紧到约 1.1–1.25,并在标题样式上显式设置。
  • 绝不固定承载文本的容器高度;让内容决定高度,必要时用 min-height。
  • 用文本间距覆盖(行高 1.5,依 WCAG 1.4.12)和 200% 缩放测试,确认没有内容被裁切或重叠。
  • 针对每款字体以目测评估行距——x字高与字重会改变同一个数字的实际观感。

延伸阅读