作为前端开发者,你可能至少有一次这样的对话经历:
💬 设计师: "为什么这些表格数字这么参差不齐?每列宽度都不一样。"
开发者: "因为字体的原因,每个数字的宽度都不同..."
设计师: "那我们必须使用等宽字体吗?"
读完这篇文章后,你就能这样回答:
"不,只需一行font-variant-numeric
代码就能解决。"
font-variant-numeric属性
font-variant-numeric
是一个控制数字显示方式的CSS属性,它允许你应用特定的数字相关样式。主要用于排版中精细调整数字的形状、间距和对齐等。
宽度控制 (numeric-spacing-values)
-
tabular-nums
:使可变宽度字体中的数字宽度统一。cssfont-variant-numeric: tabular-nums;
before01234567891231231231after01234567891231231231 -
proportional-nums
:相反,使等宽字体中的数字变为比例宽度。cssfont-variant-numeric: proportional-nums;
before01234567891231231231after01234567891231231231
样式控制 (numeric-figure-values)
-
lining-nums
:将所有数字对齐到基线,保持统一高度。cssfont-variant-numeric: lining-nums;
before0123456789after0123456789 -
oldstyle-nums
:将某些数字(3, 4, 5, 7, 9)像小写字母一样下沉显示。cssfont-variant-numeric: oldstyle-nums;
before0123456789after0123456789
分数控制 (numeric-fraction-values)
-
diagonal-fractions
:自动将普通分数表示(1/2, 3/4)转换为对角线分数(½, ¾)。cssfont-variant-numeric: diagonal-fractions;
before面粉 1/2杯糖 3/4杯after面粉 1/2杯糖 3/4杯 -
stacked-fractions
:将分数以上下堆叠的形式显示。cssfont-variant-numeric: stacked-fractions;
before1/2糖 3/4after1/2糖 3/4
其他实用功能
-
slashed-zero
:在数字0中添加斜线,以明确区分字母O。cssfont-variant-numeric: slashed-zero;
beforeID: U00123O0
afterID: U00123O0
-
ordinal
:将1st, 2nd, 3rd等文本以序数形式显示。cssfont-variant-numeric: ordinal;
before1st, 2nd, 3rd
after1st, 2nd, 3rd
注意事项
并非所有字体都支持上述CSS属性。你使用的字体必须支持相应的OpenType功能才能显示效果。
由于font-variant-numeric
属性利用了OpenType字体的高级功能,网页字体或系统字体必须内置这些功能才能正常工作。
例如,较旧的字体或基本的网页字体可能不支持diagonal-fractions
或oldstyle-nums
等功能。
总结
现在,当设计师问"为什么表格中的数字对齐这么混乱?"时,不要慌张。一行font-variant-numeric
代码就足够了。
虽然只是一行小小的CSS代码,但用户感知到的完成度差异却很大。在下一个包含数字的UI项目中,记得使用font-variant-numeric
。它肯定能帮助你创造更好的用户体验。
参考