还记得 FOUT 吗? 当通过 @font-face 使用自定义字体时,浏览器过去会显示字体堆栈中的回退字体,直到自定义字体加载完成。 这会产生“未设置样式文本的闪烁”,这令人不安,并可能导致布局发生变化。 我们致力于解决此问题,例如,在字体准备好之前使文本不可见。
几年前,浏览器开始改变其处理方式。 它们开始检测文本是否设置为尚未加载的自定义字体,并在字体加载完成(或经过 X 秒)之前将其设置为不可见。 这就是 FOIT:“不可见文本的闪烁”。 如果字体资源失败或需要很长时间,则对于那些正确关注渲染时间性能的人来说,这 X 秒的时间过长。 最糟糕的是,这种行为可能导致内容永久不可见。
如今,我们正在通过各种方式努力解决 FOIT 问题。 在 使用字体事件加速字体加载 中,Jonathan Suh 建议使用 库 来检测自定义字体是否已加载,然后才更改文档上的类名以将文本设置为该字体。 这使得行为类似于 FOUT——以稍微令人不快的视觉变化为代价加快可读内容的显示速度。
Zach Leatherman 也一直在写很多关于这方面的内容。 在 使用字体加载事件改进 @font-face 中,他还建议在设置类以设置字体类型之前等待字体加载完成。 他还介绍了触发字体下载所需的步骤(这并不像 @font-face
声明那样简单)。 Scott Jehl 在 使用字体事件重新审视字体加载 中证实了这一点,其中包括关于 cookie 和缓存的一些内容。
Zach 的 最新技巧 涉及 FOFT:“伪文本的闪烁”。 这里的想法是只等待自定义字体的罗马变体加载,并立即将文本设置为该变体。 您强制浏览器在需要时创建“伪粗体”和“伪斜体”,这些文本将在下载相应的真实版本后被替换。
Vitaly Friedman 在 Smashing Magazine 上的文章 中写到了他们的方法,他们实际上使用 localStorage
来缓存字体。 在第一次页面加载时,它最终会像 FOUT 一样,而在后续加载时则会像(快速)FOIT 一样。
我只是觉得我们每隔一段时间就会在这方面来回切换很有趣。 浏览器以一种方式运行,我们将其欺骗成以另一种方式运行。 它会切换到那种方式,然后我们又将其欺骗成以旧的方式运行。
这很酷。
我想知道如果我们将此方法与旧的 media='none' 属性技巧混合使用以异步下载资源,结果会怎样。 值得一试吗?
如果您错过了该主题,这里有一个链接 在不阻止渲染的情况下加载 CSS
感谢提及!
是的,FOUT 的全局超时不起作用——虽然它最初是为内容字体设计的,并且可能在那方面效果很好,但它不适用于图标字体(其未设置样式的回退字符可能与 web 字体包含的图标无关)。
幸运的是,字体渲染 API 即将到来。 它将允许仅使用 CSS 对此进行适当的配置:https://github.com/KenjiBaheux/css-font-rendering
具有讽刺意味的是,我当时反对 FOUT,但现在当我反对 FOIT 时,FOUT 似乎也没那么糟糕了。 移动设备如何改变网络格局真是太神奇了。
localStorage 方法很有趣——绝对需要进行一些实验,作为推动理想方案的另一种解决方案。
感谢提及并提供其他资源!
我觉得客户的内容比排版更重要 :)
还记得 sIFR 吗? 它因 FOUT 而闻名? 人们只是为了自定义字体而忍受它…… 我们告诉我们的客户,这是使用酷炫字体的正常行为。
现在也许,在出现可靠的解决方案之前,我们可以告诉我们的客户,FOUT 是为了确保用户能够快速且以更可预测的方式获得其内容而进行的权衡,这肯定比 TSFONC(三秒钟无内容闪烁)要好。
我觉得我比客户更关心 FOUT。 我敢打赌,如果我看到 FOUT 模式更多,我就会不太在乎了。
您可能比您的客户更关心。 但是未来的用户呢?;
“独特”或“外观更漂亮的字体”在用户留存方面发挥的作用可能比一些人想象的要大。 例如,我可能不会留在任何使用难以阅读的字体的现代新闻媒体网站上。 尽管大多数网站都选择了一个合理的默认字体,所以这不是问题。
所以让我们看看硬币的另一面
我更有可能留在一个对排版非常重视的网站上吗,他们甚至会对各种行高和字体进行 A/B 测试?
答案可能是“是的”。 如果他们提供更好的阅读体验,我更有可能选择他们而不是其他网站(即使我没有特别避免其他网站)。
我只是认为所有用户都应该安装世界上所有的字体。 这样,每种字体都是系统字体。 再见
@font-face
、FOUT、FOIT、FOFT。 当然也再见所有 web 字体服务:p,哎呀!有一瞬间我以为 FOFT 是“文本的闪烁错误” >_<。 我真的这样想过。
Ricardo Zea:从这个角度来看,您应该看看 http://fontfamily.io/
@Zach,伙计,太棒了!
我有一段时间一直在使用这个旧列表 http://www.ampsoft.net/webdesign-l/WindowsMacFonts.html,但 http://fontfamily.io/ 就像 CanIUse.com 用于系统字体 :)
感谢分享!