首屏文字先用系统字体渲染,自定义字体到位后整段重排,标题从两行变一行,CLS 分数 0.18。第一次遇到会往复杂处想,其实漏掉的多是个小前提。
@font-face {
font-family: 'Fallback';
src: local('Arial');
size-adjust: 96%; ascent-override: 92%;
}
两款字体的字宽和行高不一样,浏览器换字体时按新度量重新排版。font-display 只控制什么时候换,管不了换的时候跳动。这一点先确认清楚,后面就不用反复试。
「字体回退位移」这类改动最怕改一半,回滚脚本先准备好,再动生产。新版本先放一台机器上跑一天再全量,问题一般在这段时间暴露。
备份不是备了就行,恢复一次才算数,很多备份文件打开才发现是空的。接口问题先分清是没发出去、发出去了没收到,还是收到了处理失败。
偶发问题先统计频率,一小时几次和一天一次,查法完全不同。
具体做法是,用 size-adjust 和 ascent-override 把回退字体的度量调到接近自定义字体;关键标题先给固定高度 减少换字体时的位移;上线后用性能面板看 CLS 确认降到 0.1 以下。
改完照着核一遍,换字体时标题行数不变,CLS 从 0.18 降到 0.05 以内。
