# font
# 三方字体
# font-display 属性
当网页中用到远程字体时,需要考虑网络因素导致的字体加载延时问题。一般会有一个空档期:文档加载完毕但字体文件尚未完成加载解析,空档期内如何规划网页中文本的渲染呢?这就要用到一个属性:font-display
了
这个属性指定了文档在远程字体下载和可用时的展示策略。如果你的网站中用到了远程字体:
@font-face {
font-family: 'XXXX';
src: url(/path/to/fonts/examplefont.woff) format('woff')
}
关于远程字体渲染策略,有三个部分:
- 阻塞期:表示浏览器会block文档以等待字体的下载。阻塞期字体无法顺利加载时,浏览器会使用备选字体
- 交换期:当字体在交换期完成加载时,需要把上一步渲染的备选字体替换为目标字体
- 失败期:上述周期内无法下载字体则自动适应回退字体
这里我们重点关注前两个,阻塞期、交换期的不同时长的组合对应了font-display属性的不同值:
- block:表示文档会block一段时间(阻塞期大概3s)来等待远程字体文件的下载,该时间内字体如没有完成下载,使用备选字体,等远程字体下载完毕后再进行替换。
- swap:表示文档不会block(极短的阻塞期< 1s),直接使用备选字体,远程字体下载完毕后再进行替换。
- fallback:表示文档不会block(极短的阻塞期< 1s),直接使用备选字体,并且在交换期(大概是2s)内下载完毕则进行字体替换,否则放弃使用远程字体。
- optional:表示文档不会block(极短的阻塞期< 1s),这么短时间内字体完成加载则使用字体否则放弃使用。
- auto:自动模式,由浏览器决定(chrome下行为跟swap类似)
应用
- 如果想你的网站尽可能优先显示选用的字体,可以使用block属性值:它会block一段时间,等字体文件下载解析完毕再渲染文本,不会因生硬的字体切换带来不舒服的视觉体验。保证了文本视觉的一致性。
- 如果想你的网站尽可能保持文本可见,可以使用swap属性值:它会先用备选字体渲染文本,等你的字体加载好再替换。保证了文本的可见性。
- 还有一种情况就是所选的字体的缺席并不会带来很大的体验问题,换句话说:该字体并没有特别重要,那可以选择fallback值。不过这种场景不多。
一般情况下,swap的使用场景会更多一些
# 参考
← Web Worker Unicode →