本页面借助 AI 辅助翻译。英文原文为权威版本。
字宽是字体诸轴中最安静的一个。读者很少有意识地注意到它,它却支配着易读性所依赖的两项资源:字母内部的字腔空间,以及一行能容纳的字符数。2005 年的结论是:常规至略窄的字宽最为易读——加宽字体把字形拉伸到超出轻松辨认的程度,而重度压缩的字体会挤压那些用来区分 e 与 c、o 的字腔。这一结论经受住了时间的考验。变化的是机制:字宽不再是字体文件的固定属性,而是一个连续的、可编程的设计轴。
2005 年以来的变化
2005 年,"窄体"字体即使存在,也是一个单独的文件,而网页设计师大多既没有这样的字体,也没有交付它的机制。两项发展改变了这一切。网页字体交付(现代 @font-face 时代,约始于 2010 年)让真正的窄体与宽体字重档变得可用。随后,OpenType 可变字体(2016 年起)把 wdth 注册为标准轴,在 CSS 中通过 font-stretch——现已正式改称 font-width——暴露出来,提供 condensed(75%)、semi-condensed(87.5%)等关键字值,或在支持该范围的字体上使用任意百分比。
经过设计的字宽轴的关键性质在于:它不是缩放。当可变字体沿 wdth 轴变窄时,设计师的插值保持竖笔画粗细一致,在几何允许的范围内尽量撑开字腔,并重新调配间距。水平缩放——transform: scaleX(0.8) 及其前身——则恰恰相反:它使竖笔画相对横笔画变细,扭曲曲线,并按比例压缩间距。真窄体与伪窄体之间的区别,正是真意大利体与剪切罗马正体之间的区别,而且出于同样的原因,它对低视力读者同样重要。
第二个变化是观念上的。响应式设计教会我们:用户真正体验到的变量是行长,而非字体选择——而字宽如今是管理行长的一件工具。在窄视口下换行尴尬的标题,可以收紧几个字宽单位,而不必缩小到低于可读的字号。这是一项真正的新能力,也伴随着真正的新错法。
字宽与字腔预算
第一版中的易读性机制对这一权衡的描述依然准确。加宽字宽在水平方向放大字形,却不增加任何区分性信息;在阅读字号下,它会略微拖慢辨认速度并浪费行长。强烈压缩的字宽会闭合字腔,缩小易混字对之间的空间差异——在过紧的窄体里,o、e、c 趋于一致,而 minimum 这类词中竖笔的节奏变成了一排栅栏。
对连续文本而言,安全区间依然狭窄:大约为标准字宽的 90% 至 100%——即从标准到略欠半窄体。窄体及更窄的字重档是展示工具——标题、标签、数据密集的表格,在这些场合,经过设计的窄体确实优于被压扁的常规体。加宽字体是品牌工具。二者都不属于正文段落。
字重与字宽相互作用。把粗体压窄等于让字腔遭受双重挤压;如果必须压窄,请停留在常规或更轻的字重。字号同样有交互:在 40px 标题字号下可行的字宽,到了 16px 正文字号就需要放宽。一些可变字体为 wdth 配备了光学字号轴(opsz),能部分地代管这件事;多数字体则把它留给你。
缩放、放大与低视力
最需要宽裕字宽的人群,恰恰是最可能在最糟糕的条件下遭遇窄体的人群。屏幕放大镜用户看到的是放大后页面上的一小块窗口:被放大的窄体会暴露其闭合的字腔与紧密的排布,却没有整行文本的语境作为补偿。使用 200% 浏览器缩放的读者——WCAG 2.2 的"调整文本大小"准则(1.4.4)要求内容在这一级别下仍然可用——将触发你的窄视口布局,而这正是设计师如今最容易为了"塞得下"而压窄字体的地方。
对正文要抵制这种诱惑。如果一个布局只有靠挤压字形才能在 200% 缩放下成立,问题出在布局。WCAG 1.4.10(回流)指明了正确方向:内容应当回流为单列,而不是被压缩。在回流之下调整标题的字宽是正当的;把它用在段落上则是危险信号。
文本间距适配在这里同样重要。WCAG 1.4.12 要求用户增大字母间距和单词间距时内容不得损坏。依赖紧密排布的窄体,在低视力用户增加 letter-spacing 时往往在视觉上分崩离析——这是让连续文本保持在接近标准字宽的又一个理由:在标准字宽下,追加字距的退化是平缓的。
避免伪窄体
伪窄体在现实中以三种形态存活:对文本施加 CSS 变换;把过时的 font-stretch 用在没有字宽轴的字体上(浏览器会正确地忽略它,但设计师有时会用变换来"修复");以及对 SVG 或 canvas 文本做非等比缩放。三者都会产生任何字体设计师都不会认可的"竖笔变细"式扭曲。如果设计确实需要更窄的字体,选项是:带有真正 wdth 轴的可变字体、单独设计的窄体字重档,或者另一种布局。不存在尊重读者的第四种选项。
真正使用 wdth 轴时,优先采用高层级的 font-stretch/font-width 属性而非底层的 font-variation-settings,让浏览器能够合理地管理继承与回退;并核实回退情况:在可变字体加载失败的系统上,对回退字体栈发出的窄体请求应当退化为标准字宽,而不是被合成挤压。
在 CSS 中
/* Width belongs to the wdth axis — never to transforms */
body { font-stretch: 100%; }
.compact-table { font-stretch: 92%; } /* slightly condensed floor */
/* Anti-pattern — distorts stroke contrast and spacing:
.squeezed { transform: scaleX(0.8); } */
建议
- 连续文本保持在标准字宽的约 90% 至 100% 之间;2005 年的结论依然成立。
- 把经过设计的窄体字重档留给标题、标签和空间紧张的展示场景;把加宽字重档留给品牌。
- 绝不伪造字宽:不用 scaleX 变换,不对 SVG 或 canvas 中的文本做非等比缩放。
- 通过 font-stretch(font-width)使用可变 wdth 轴,并确认字体加载失败时能够平滑回退。
- 不要为了扛住 200% 缩放或窄视口而压窄正文——按 WCAG 1.4.10 的要求改为回流。
- 验证用户增大字母与单词间距(WCAG 1.4.12)时文本仍然完好;过紧的窄体排版往往最先在这里失败。
- 避免把窄体字宽与粗体字重或小字号组合使用;字腔预算经不起这样透支。