把文字放进正确的外框,只完成了排版的一部分。字面大小、数字宽度和图标重量,仍会改变整行看起来是否稳定。
我先处理换行与会更新的数值,再看字形、混排和图标。以下数值来自固定样例,换字体、语言或内容后都需要重新检查。
本文由原篇重编并扩充。样例数值代表当时条件,并非所有界面的固定规格;系列背景与工具入口见 总论。
换行与数值
让换行也参与构图
标题的最后一行只留下很短的词,下面的留白就容易偏向一边。平衡换行(balanced wrapping)会在既定宽度里重新分配文字,让几行的分量更接近。这组对照固定 220 px 行宽、文案、字号与字距,只改变换行方式。

短说明则不必把每行排得一样重,我更在意末行是否只剩孤单的一小段。优化换行(pretty wrapping)让浏览器有机会重新安排断点,同时保留自然的长短。下面这组对照也固定文字和行宽。

这些选择需要连同实际文案一起看。标题有自己的语意停顿,短文也有适合的阅读宽度;英文单字与繁体中文标点的断行条件不同,浏览器的结果也可能不同。我会先让容器有合理的伸缩空间,再检查窄屏幕和较长译文,最后决定是否采用平衡或优化换行。
数字更新时,每一位先站稳
计时器从 11:11 换成 08:08,如果字形宽度不同,整串数字就会改变分量。等宽数字(tabular figures)让每一位占相同宽度,适合用在会更新的数值、计数器与需要扫读的数字列。
两边的主要数字都用 Geist,字号和内容相同,只切换比例数字与等宽数字。图内的小字标注另用等宽字体,没有参与这项字宽比较。

位数会增加,空间也要先安排
每一位等宽,还没解决整串数字会变长的问题。计数器从 9 变成 99、再到 100,仍会多出字符。下图两边都已启用等宽数字,右侧再保留三位数的宽度并靠右排列,后面的说明才能维持起点。

三位宽度是这个计数器的预期范围。加入千分位、负号或更大的数值时,需要重新留空间;日期、倒数和百分比也各有自己的最长格式。我会让数字在预留范围内变化,周围的文字和操作保持安定。
金额沿着小数点排列
同一列金额若要快速比较,显示精度、数字宽度与对齐方向需要一起决定。这张图加入负数,把格式固定为两位小数、使用等宽数字,再只改变金额的对齐方向。靠右后,小数点和个位数便能沿着同一条线排列。

单位放在独立、视觉分量较轻的一列,与金额保持固定距离。这里的小数点能对齐,是因为显示精度相同;若同一列必须混用不同小数位数,就要再把整数与小数部分分列安排。负号也要留在数值里,不能为了对齐而省略。等宽数字只是起点,实际字体的字偶距(kerning)仍可能影响排列;我会用同一组正负金额检查,而不只看设置是否已开启。
字面与图标
居中后,还要看可见的形状
光学居中(optical centering)处理的是可见形状的重量。右指三角形的面积偏向左侧,即使外接框居中,仍可能看起来偏左。这里固定按钮,只把同一个图形向右移 1 px;这个取值属于图中的三角形,其他图标需要重新看。

文本框居中后,再看字面高低
文字的布局范围包含字体预留的上下空间,可见的字面只占其中一部分。按钮用弹性布局居中后,文字仍可能看起来略高或略低。图中同样的 Save、同样的字体与行高,左侧保留文本框,右侧沿大写字母高度与基线修整上下边缘,再放入同样高的按钮。

文本框修剪(text-box trimming)让这种空间可以按字体边缘处理。图里的细角标与中线用来看清差异;实际选择仍要检查字母的上伸、下伸和旁边的图标。繁体中文、假名与韩文需要按各自字体的字面重新判断,英文的 cap/baseline 取值不能直接代替所有语言的光学居中。不支持修整的环境仍保留原来的文本框布局。
先看字面,再安排混排
同样标成 24 px,汉字、假名、韩文和英文字母看起来仍可能大小不同。字号衡量的是字框,可见的字面只占其中一部分;字面比例与位置也会随字体、字重和实际字符串改变。文字旁边有图标时,我会把它们放在一起看,而不只核对两个外框的中心。

语言标记与回退字体也应先安排好。中文、日文和韩文需要合适的地区字形,同一段混排文字也可能由多个字体共同绘制。只看到 CSS 里的 family 名称,还不足以确认每个字来自哪里。W3C 中文排版需求也分别说明了地区差异与字面。
前面的 cap/alphabetic 修整适合拆解那组英文标签。换成 CJK,可以再研究 ideographic 边缘,但仍需检查实际字体与浏览器;混入英文、数字或上下标时,也要一起判断。不支持时保留正常字框,避免把英文试样的取值变成所有语言的固定偏移。
间距、标点与断行一起判断
文字间的空白有不同来源。字距调整字符之间的距离,混排间距处理相邻汉字/假名与西文字母、数字的交界,标点留白则来自标点字符本身的空间。它们各自影响阅读,不能只靠整段缩紧字距来处理。

text-autospace 可在布局时添加混排间距,不必修改文字内容;采用前仍需检查原有空格。text-spacing-trim 处理部分 CJK 标点的内部留白,和修整上下字框的 text-box 作用不同。各属性的支持范围要分别检查,韩文空格也需按其语言习惯判断。CSS Text 规范说明了这些机制。

我会先用真实标题、说明和长译文检查窄屏。中文例子保住 InterfaceCraft 单词,日文例子观察严格禁则下的小假名,韩文则比较按音节与按词断行。正文行距、短标签和多行标题也需分别判断。文字放大时让容器继续生长,比守住原来的单行高度更重要。
图标侧的留白,按可见分量微调
文字加上一个箭头后,箭头周围的空白也会参与整组内容的分量。这里固定文字、图形、间隔与上下内边距,只把图标侧的水平内边距从 16 px 改为 14 px,让组合稍微收紧。

2 px 是这个箭头与字样的调整量。换成填满的图标、另一套字体,或把图标移到文字前面,都要回到整组外形看。图标若在自己的画布里已经偏移,先修正图稿本身,按钮就能少一层补偿。
小图标重新判断线宽
笔画粗细(stroke weight)也不能只跟着整个图标缩小。这个 14 px 文件夹,左侧将 24 px 源稿的 1.5 px 线宽按比例缩成 0.875 px,右侧校正为 1.25 px。图形尺寸不变,调的是最终笔画。
我会在实际尺寸下,把线帽、转角、内部留白和旁边的文字一起看。这个图标需要的分量,未必适用另一个更密的形状。

小标签也有自己的字距
全大写英文标签常和数字、标题贴得很近。字母挤在一起时,小字可能变成偏重的一整块形状;略微拉开字距(tracking),则能让它保持清楚的节奏。
这组固定 10 px、500 字重、同一条大写标签,只比较 0 与 0.05 em 字距。下方内容、标签与内容的间距都不变。

我会连同字号、字重、文字长度一起判断。这里的大写标签适合留一点空气,繁体中文小标题与普通正文则有不同的字面密度;每个角色都需要自己的分量,整篇文字的层级仍要维持简单。
我会在数值更新、换语言与放大文字后,再看一次整行。字框正确、字面稳定和信息对齐是不同层次的检查;只有在实际内容里都成立,微调才有意义。
