【実務・中級編】font-displayによるフォント読み込み最適化 – HTML実践ガイド

Webフォントの「一瞬の空白」を制する。`font-display`でUXを劇的に改善する実践ガイド

Web制作の現場で、クライアントやデザイナーから「Webフォントを導入したい」と要望されたとき、皆さんは何を懸念しますか? 多くのエンジニアが真っ先に思い浮かべるのは、「読み込み中のカクつき」や「FOIT/FOUT問題」でしょう。

リッチなフォントを当てるのは簡単ですが、それを「ユーザー体験(UX)を損なわずに」実装するのがプロの仕事です。今回は、Webフォントの読み込み戦略の要である`font-display`プロパティについて、ブラウザの裏側の挙動を紐解きながら、現場で即戦力となる最適解を解説します。

—

なぜ、Webフォントは「一瞬の空白」を生むのか

まず、ブラウザがWebフォントを読み込む際の裏側の動きを理解しましょう。

1. フォントのDL開始: ブラウザがCSSを解析し、`@font-face`を見つける。
2. ブロッキング: フォントが降ってくるまで、ブラウザはそのフォントを使うテキストを「非表示(Invisible)」にするか、システムフォントで仮表示する。

このとき、「テキストが全く見えない状態(FOIT: Flash of Invisible Text)」や、「システムフォントからWebフォントへガクッと切り替わる瞬間(FOUT: Flash of Unstyled Text)」が発生します。これがユーザーに与えるストレスは計り知れません。

これを制御するのが、CSSの`font-display`プロパティです。

—

現場で選ぶべき「3つのカード」

`font-display`には主に3つの主要な値があります。それぞれの特性を理解し、プロジェクトの性格に合わせて使い分けるのが「デキるエンジニア」の流儀です。

1. `swap`:パフォーマンス重視の鉄板

「まずは読めることが最優先」。システムフォントで即座に表示し、フォントがDLでき次第、Webフォントに差し替えます。

  • 適した用途: 本文、ブログ記事など、読みやすさが全てであるコンテンツ。
  • 懸念点: 切り替わった瞬間にレイアウトシフト(ガクつき)が起こりやすい。

2. `fallback`:デザインとUXの妥協点

「数ミリ秒なら待たせるが、あとは諦める」。非常に短いブロッキング期間(100ms程度)のあと、システムフォントを表示します。フォントがDLできれば差し替えますが、DLが遅すぎるとそのままシステムフォントで突き通します。

  • 適した用途: ブランドアイデンティティが重要なメイン見出しなど。

3. `optional`:迷ったらこれを選べ(究極のUX)

「DLが爆速なら使うが、遅いなら無理して使わない」。最初の表示でシステムフォントを使い、その間にフォントをバックグラウンドでDLします。次にページを訪れたときは確実にWebフォントがキャッシュされているため、UXが極めて滑らかです。

  • 適した用途: ユーザーの回遊性が高いサイト、パフォーマンスを極限まで高めたいモダンなWebアプリ。

—

【実践】コピペで使える最強のCSS設計

実務では、単にプロパティを書くだけでなく、フォントのロード戦略を最適化する必要があります。以下のコードは、多くの現場で私が採用しているテンプレートです。

/

  • 現場で使える font-display 設定のテンプレート
  • 読み込み時間を最適化し、FOITを最小限に抑える

/

@font-face {
font-family: ‘MyCustomFont’;
src: url(‘/fonts/my-font.woff2’) format(‘woff2’);
font-weight: 400;
font-style: normal;

/

  • swap: 読み込みが終わるまでシステムフォントで表示。
  • レイアウトシフトが許容できる箇所には最も効果的。

/
font-display: swap;
}

@font-face {
font-family: ‘HeadingFont’;
src: url(‘/fonts/heading.woff2’) format(‘woff2’);
font-weight: 700;

/

  • optional: 表示速度を最優先。
  • ネットワークが遅い環境でもユーザーを待たせない。

/
font-display: optional;
}

—

シニアエンジニアからのワンポイントアドバイス

最後に、現場の泥臭い話をひとつ。

`font-display: swap`を使うと、どうしてもWebフォントに切り替わった瞬間に「文字幅の違い」によるレイアウトシフト(ガクつき)が発生します。これを防ぐには、`size-adjust`や`ascent-override`といったCSSフォント記述子を併用するのが現代のベストプラクティスです。

システムフォントとWebフォントの「見た目のサイズ差」をCSS側で計算して埋めることで、切り替わりの瞬間をユーザーに気づかせないほど滑らかに繋ぐことができます。

「フォントを当てる」ことだけで満足せず、「ユーザーが文字を読み始める瞬間」の体験までデザインすること。それが、ただのコーダーと、選ばれるフロントエンドエンジニアの境界線です。

ぜひ、次回のプロジェクトで試してみてください。コードの質が、確実に一段階上がりますよ。

コメント

タイトルとURLをコピーしました