在做GithubProfile项目的时候,使用了数字动画展示的效果,如My GithubProfile页面中的 commits,stars 以及 followers 数字。实际使用中,由于数字字体不等宽,造成在数字增长动画时很明显的震颤,体验非常不好。

这里我最终使用了 CSS 的font-feature-settings的属性来解决了这一问题,先来看解决前后的效果对比图。 pnum-vs-tnum

font-feature-settings

font-feature-settings是 CSS 的高级特性,用来提供对 OpenType 字体图形展示调节,MDN·font-feature-settings

首先 CSS3 提供了一组与 OpenType 字体特性显示映射的属性和值,这里我们首先利用了font-variant-numeric,并将其值设为tabular-nums,这表示要求字体的数字图像保持尺寸一致,并像在表格中一样对齐,这等同于 OpenType 字体中的tnum

当没有对应的属性映射时,我们则可以使用font-feature-settings属性,这里我们直接将其设为要求的 OpenType 属性tnum

font-feature-settingsfont-variant-numeric属性可以同时应用,它们其中任何之一都可以达到相同的效果,但是为了更多的兼容支持,对它们同时做了定义。

兼容性

font-feature-settings 兼容性: font-feature-settings

font-variant-numeric 兼容性: 在 CanIUse 数据库中未找到结果,贴上 MDN 的兼容性说明 font-variant-numeric

可以看出font-feature-settings的主流浏览器兼容支持比较好,所以使用时优先利用该特性。

Demo 对比

这里给出montserrat字体在开启该特性前后的效果