当网络字体加载缓慢时恢复为无样式文本?

Posted

技术标签:

【中文标题】当网络字体加载缓慢时恢复为无样式文本?【英文标题】:Revert to unstyled text when web fonts are slow to load? 【发布时间】:2012-01-13 11:28:42 【问题描述】:

我正在使用 Google 网络字体,如下所示:

@font-face 
  font-family: "Vollkorn";
  font-style: normal;
  font-weight: normal;
  src: local('Vollkorn Regular'), local('Vollkorn-Regular'), url('http://themes.googleusercontent.com/static/fonts/vollkorn/v2/BCFBp4rt5gxxFrX6F12DKnYhjbSpvc47ee6xR_80Hnw.woff') format('woff');

body 
    font-family: "Vollkorn", Georgia, Times, serif;

在 Chrome 中工作时,没有“无样式文本的闪烁”(如 Typekit blog post 中所述)。相反,在网络字体下载完成之前,文本根本不会加载。

通过快速连接,这很棒,因为字体异步加载非常快。但是,在连接速度较慢的情况下,页面看起来像是空了几秒钟,直到加载了网络字体——可用性很差。

是否有一种巧妙的方法可以先在格鲁吉亚显示文本,然后在资源加载后添加 Vollkorn 字体?

我想我的意思是我实际上很喜欢“无样式文本的闪烁”,而不是空白页,并且想强制执行这种行为。

【问题讨论】:

【参考方案1】:

您应该查看 Google 与其他一些网络字体服务共同开发的网络字体加载器。

http://code.google.com/apis/webfonts/docs/webfont_loader.html

【讨论】:

【参考方案2】:

这可以在页面加载后通过 javascript 完成:

<script>
window.onload = changeFont;

function changeFont() 
   document.getElementsByTagName('body')[0].fontFamily = '"Vollkorn", Georgia, Times, serif';

</script>

然后,更新您的 CSS 以从列表中删除“Vollkorn”,将其设置为格鲁吉亚。根据加载字体所需的时间,您可能需要将字体更改包装在 setTimeout 调用中。

【讨论】:

是的,我考虑过 setTimeout,但我真正需要的是一个“网络字体已加载”事件。有什么方法可以使用 JS 来解决这个问题?

以上是关于当网络字体加载缓慢时恢复为无样式文本?的主要内容,如果未能解决你的问题,请参考以下文章

当超过 10k 数据时,Laravel 数据表加载缓慢

css 文本与字体

将样式组件与反应和故事书一起使用时未加载字体

页面加载缓慢的原因

Google Fonts导致网页加载速度慢

docker nginx没有加载css样式