我们有一个网站-一切正常,但在页面加载前,Web字体会闪烁一下。
期望的行为是不闪烁。
在其他站点上似乎没有这种情况,我也找不到任何区别。
我们正在使用fonts.com字体。
在谷歌上我只能找到Firefox的问题-但这对我来说在所有浏览器中都发生。
我错过了什么明显的东西吗?我该如何解决这个问题?
有几种方法可以解决这个问题。
1 - 由于您是从网站中获取字体而不是将字体托管在自己的服务器上,因此在页面加载和从fast.fonts.net加载字体之间存在延迟。
如果您下载字体(.ttf)并通过fontsquirrel的Webfont生成器运行它,应该可以解决一些加载问题。
2 - 由于页面加载时只会闪烁几秒钟,您可以在字体加载时隐藏网页内容的短暂时间(200毫秒)。这将确保当您的页面内容加载时,用户不会看到闪烁。
Paul Irish撰写了一篇关于此的文章:http://www.paulirish.com/2009/fighting-the-font-face-fout/
我曾经遇到过这种情况,我通过以下两个步骤解决了问题:
1- 使用预加载: 在头部添加以下代码
<link rel="preload" href="/fonts/yourfont.woff2" as="font" type="font/woff2" crossorigin ></link>
确保 href
路径和扩展名正确。
使用预加载,可以在其他资源之前开始下载字体,从而提高防止闪烁的机会,但如果您的 Web 字体过于繁重,则可能不够。
2- 使用 font-display:fallback
属性。
该属性会在加载时阻止短时间内显示文本,如果超过了这个时间还没有加载,它就会切换到默认字体。
例如:
@font-face {
font-family: ExampleFont;
src: url(/path/to/fonts/examplefont.woff) format('woff'),
url(/path/to/fonts/examplefont.eot) format('eot');
font-weight: 400;
font-style: normal;
font-display: fallback;
}
font-display: block
,而不是使用回退。你可以在这里了解有关此属性的更多信息。Cache-Control
头部。在最好的情况下,你可以允许这些资源在浏览器中缓存一段合理的时间,这样你的网站加载时间将大大提高。 - undefined<script src="https://ajax.googleapis.com/ajax/libs/webfont/1.6.26/webfont.js"></script>
<script>
WebFont.load({
google: {
families: ['Droid Sans', 'Droid Serif']
}
});
</script>