返回

用 font-display 属性控制字体加载和替换

前端

改善字体加载:使用 font-display 属性消除文本闪烁

你是否厌倦了网站上的文本在加载新字体时出现闪烁的现象?这种闪烁,称为 Flash of Unstyled Text (FOUT),会损害用户体验,尤其是当页面上充斥着文本内容时。

了解 FOUT 的原因

当浏览器加载一个网站时,它会同时尝试加载和渲染文本。但是,如果网站使用外部字体(即非系统自带的字体),浏览器可能无法立即访问该字体。这会导致浏览器使用默认字体暂时显示文本,直到外部字体加载完成。一旦外部字体可用,浏览器就会突然将文本切换为目标字体,从而产生令人不快的闪烁效果。

解决 FOUT:引入 font-display 属性

为了解决 FOUT 问题,CSS3 引入了 font-display 属性。此属性允许您控制字体加载和替换的行为,从而指定页面文本在字体加载过程中应如何显示。

font-display 属性的选项

font-display 属性具有以下选项:

  • auto: 浏览器根据其自身策略加载和替换字体。这是默认值。
  • block: 在字体加载完成之前,使用系统默认字体显示文本。在字体加载完成后,不替换文本。
  • swap: 在字体加载完成后,立即替换文本。如果字体加载失败,则使用系统默认字体显示文本。
  • fallback: 在字体加载完成之前,使用指定的后备字体显示文本。在字体加载完成后,替换文本。
  • optional:fallback 类似,但当后备字体不可用时,不显示文本。

使用 font-display 属性的示例

以下是如何使用 font-display 属性来防止 FOUT:

/* 加载字体完成前使用系统默认字体,完成后不替换文本 */
body {
  font-family: 'Arial', sans-serif;
  font-display: block;
}

/* 加载字体完成前使用后备字体,完成后替换文本 */
h1 {
  font-family: 'Helvetica', 'Arial', sans-serif;
  font-display: fallback;
}

注意事项

  • font-display 属性仅适用于网络字体,不适用于系统字体。
  • font-display 属性的某些选项(例如 swap)可能会影响字体加载速度。
  • 不同的浏览器对 font-display 属性的支持可能不同。

结论

通过合理使用 font-display 属性,您可以控制字体加载和替换的行为,从而消除 FOUT 问题,提升用户体验和网站性能。

常见问题解答

  1. 什么是 FOUT?
    FOUT 是文本在加载新字体时出现闪烁的现象。

  2. 如何使用 font-display 属性解决 FOUT?
    font-display 属性允许您指定文本在字体加载期间的显示方式,从而消除 FOUT。

  3. font-display 属性有哪些选项?
    font-display 属性的选项包括 autoblockswapfallbackoptional

  4. 是否可以在所有浏览器中使用 font-display 属性?
    不同浏览器对 font-display 属性的支持不同。

  5. 使用 font-display 属性时需要考虑哪些注意事项?
    font-display 属性仅适用于网络字体,并且某些选项可能会影响字体加载速度。