[英]How to lazy load web font declared by @font-face?
我得到的是一个字体系列 CSS 声明,首先使用程式化的 web 字体,然后回退到系统 fonts。这工作正常,但我的 web 字体很大~15MB(中文字体),甚至在 CDN 上托管它加载时间超过 5 秒。
问题在于浏览器处理显示的方式不同。 我认为 Firefox 有更好的方法,即使用最先可用的字体(系统字体),并在准备好(加载)时逐步显示在 web 字体中。
然而,Chrome 只是尝试首先使用 web 字体(因为它在字体系列中排在第一位)并且只显示一个空白区域,直到字体准备好呈现文本。
有没有办法让 Chrome 的行为与 Firefox 相同?
编辑:添加字体系列声明。
font-family: "Noto Sans CJK TC", "Microsoft Yahei", "微软雅黑",
SimHei, "黑体", STHeiti, "华文黑体", sans-serif;
阅读完所有评论后,我现在有了一个可以接受的渐进式加载 Web 字体的解决方案。
font-family
CSS 定义以使用网络安全字体。@font-face
定义,并使用带有事件处理的字体加载器来逐步渲染字体 ( https://github.com/bramstein/fontfaceobserver )。当新加载的字体替换网络安全字体时,会有轻微的“弹出”,但至少没有 FOIT(不可见文本的闪烁)。
https://www.filamentgroup.com/lab/font-events.html有一个关于使用 FontFaceObserver 的很好的指南,但无法让它与他们的示例代码一起工作。 相反,我使用了 GitHub 存储库中的参考代码 - 尽管我认为他们的措辞是错误的/误导性的。 如果你还没有实现 Promise polyfill,你应该使用fontfaceobserver.standalone.js
。
实现此目的的简单方法是添加
@font-face {
font-display: swap;
}
了解更多信息https://developer.mozilla.org/en-US/docs/Web/CSS/@font-face/font-display
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.