Icon Font 加载慢还闪一下无样式文本,怎么优化?
我在项目里用了 Icon Font,但每次刷新页面都会先看到一个方框或者文字闪一下,然后图标才出来,体验很差。已经把字体文件放本地了,也加了 font-display: swap;,但还是有 FOIT/FOUT 问题,咋办?
这是我的 @font-face 写法:
@font-face {
font-family: 'MyIcons';
src: url('./fonts/myicons.woff2') format('woff2');
font-weight: normal;
font-style: normal;
font-display: swap;
}
首先建议你在 CSS 里加个通用的 class 来隐藏文本闪现的问题。具体来说,给使用 icon 的元素加上一个类:
然后在 JavaScript 里监听字体加载完成事件:
这样做的原理是:先隐藏图标区域的文字,等字体完全加载后再显示。这个方案比单纯用 CSS 更可控。
另外建议你在 @font-face 里增加更多格式支持:
多格式支持可以提高兼容性,减少加载时间。虽然多了几个请求,但现在的 HTTP/2 协议能很好地处理这些问题。
最后提醒下,如果图标数量不多,考虑直接用 SVG 替代 Icon Font。SVG 性能更好,而且不会出现这种闪烁问题。不过这也看具体情况,改起来工作量也不小。
HTML:
CSS:
如果还嫌麻烦,直接换SVG Sprite吧,一劳永逸,没这破事。