@font-faceのfont-display記述子について

toc目次

@font-faceとは

@font-faceは、CSSでWebフォントを指定するためのルールです。

@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;
}

Webフォントはインターネット上から読み込んで利用するフォントのことで、ユーザーがフォントをインストールしていなくても、指定したフォントを表示させることができます。

Webフォント表示について

@font-faceを使用してWebフォントを表示する場合、Webフォントが読み込まれるまでのフォント表示は「期間period)」によって変わります。

期間は「ブロック期間block period)」、「スワップ期間swap period)」、「失敗期間failure period)」が規定されています。

各期間の内容は以下のとおりです。

期間 内容
ブロック期間 代替フォントを表示せず、Webフォントを読み込む期間
スワップ期間 代替フォントを表示して、Webフォントを読み込む期間
失敗期間 Webフォントの読み込みをあきらめ、代替フォントを表示する

各期間で表示されるフォントは以下のとおりです。

内容 ブロック期間 スワップ期間 失敗期間
Webフォント読込前 表示なし 代替フォント 代替フォント
Webフォント読込後 Webフォント Webフォント

font-display記述子の値について

font-display記述子に設定できる値は以下のとおりです。

font-display: auto; /* 初期値 */
font-display: block;
font-display: swap;
font-display: fallback;
font-display: optional;

font-display記述子の値による期間の秒数は以下のとおりです。
(※ 秒数はブラウザにより多少変わります)

ブロック期間 スワップ期間 失敗期間 備考
auto ブラウザに依存
block 3000ms 無期限
swap 100ms 無期限
fallback 100ms 3000ms 無期限
optional 100ms 0 無期限

期間は規定の秒数経過後に以下のように移行します。

  • ブロック期間 ➜ スワップ期間 ➜ 失敗期間

たとえばswapを指定した場合、100msのブロック期間の後、無期限でスワップ期間となります。

font-displayはどれを設定するのが良いか

一般的にはswapが推奨されていて、Google Fontsでもパラメーターでswapが指定されています。
Google Fonts

ただし、必ずswapが良いということはなく、サイトの特性によって使い分ける必要があります。

font-displayの値を決めるためのフローチャートは以下のとおりです。(秒数は参考値)
font-displayのフローチャート

本サイトではWebフォントを表示し、読み込みに時間がかかる場合は空白ではなく代替フォント表示を行いたいのでswapを指定しています。

参考