@font-faceとfont-displayを使用してCSSでカスタムフォントを定義する方法
序章
@font-face
は、カスタムフォントを定義するために使用されるCSSアットルールです。 @font-face
を使用して、CSSファイルと同じサーバーでホストされているフォントファイルへのパスを指定します。 このルールはかなり前から存在していましたが、新しいプロパティfont-display
があり、これにより新しいレベルの読み込みオプションが提供されます。
このチュートリアルでは、人気のあるオープンソースフォントであるRoboto Mono をダウンロードし、@font-face
を使用してサンプルWebページにフォントをロードします。 最高のユーザーエクスペリエンスを作成するために、font-display
プロパティを使用して、ロードする方法とタイミングをカスタマイズします。
前提条件
nano
やVisualStudioCodeなどの任意のコードエディター- Webブラウザ
- HTMLの基礎に慣れている。 チュートリアルシリーズHTMLを使用してWebサイトを構築する方法の概要をご覧ください。
ステップ1—フォントのダウンロードとWebページの構築
@font-face
ルールの調査を開始する前に、サンプルのWebページとディレクトリを設定しましょう。
作業ディレクトリから、Webサイト用の新しいフォルダとフォントファイル用のサブディレクトリを作成します。
mkdir -p ./website/fonts/
新しいプロジェクトのルートディレクトリwebsite
に移動します。
cd website
ここから残りのすべてのコマンドを実行します。
次に、curl
コマンドを使用してRobotoMonoフォントをダウンロードします。 google-webfonts-helper という人気のアプリを使用しています。これにより、Googleのコンテンツ配信ネットワークから複数のフォントを1つのきちんとバンドルされたGETリクエストで直接ダウンロードできます。
RobotoMonoの2つの異なるスタイルとウェイトregular
と700italic
をダウンロードしましょう。
curl -o ./fonts/fontfiles.zip "https://google-webfonts-helper.herokuapp.com/api/fonts/roboto-mono?download=zip&subsets=latin,latin-ext&variants=regular,700italic&formats=woff,woff2,ttf"
RobotoMonoフォントファミリーから必要なvariants
を指定していることに注意してください。 次に、それぞれに必要なformats
を指定します。 ttf
、woff
、woff2
のフォーマットをリクエストしています。 woff2
形式は最新のWebフォント形式ですが、一部のブラウザーではwoff2のサポートがまだ不足しています。 そのため、InternetExplorer9へのをサポートするwoff形式のフォールバックとTrueType形式またはttfも提供しています。 これにより優れたカバレッジが得られますが、CSSを作成するときに、標準フォントを使用してより多くのフォールバックオプションを提供します。 font-display
プロパティは、さまざまなユーザーのフォントの読み込み方法を管理するのにも役立ちます。
次に、ダウンロードしたコンテンツを./fonts
フォルダーに解凍します。 LinuxおよびmacOSを実行しているマシンでは、次のコマンドを使用します。
unzip ./fonts/fontfiles.zip -d ./fonts
./fonts
フォルダーの内容を調べます。
ls ./fonts
フォントごとに.ttf
、.woff
、.woff2
ファイルの6つの新しいファイルが見つかりました。
フォントをダウンロードしたら、CSSを作成し、それを使用してHTML要素のスタイルを設定しましょう。
ステップ2—@font-face
ルールを使用する
このステップでは、@font-face
プロパティを使用してダウンロードしたフォントを適用します。
nano
またはお好みのテキストエディタを使用して、style.css
というファイルを作成して開きます。
nano style.css
次のコンテンツを追加します。これにより、ファイルへのパスを使用して@font-face
ルールが定義されます。
style.css
@font-face { font-family: 'Roboto Mono', monospace; src: url(fonts/roboto-mono-v12-latin-regular.woff2) format('woff2'), url(fonts/roboto-mono-v12-latin-regular.woff) format('woff'), url(fonts/roboto-mono-v12-latin-regular.ttf) format('truetype'); } @font-face { font-family: 'Roboto Mono', monospace; src: url(fonts/roboto-mono-v12-latin-700italic.woff2) format('woff2'), url(fonts/roboto-mono-v12-latin-700italic.woff) format('woff'), url(fonts/roboto-mono-v12-latin-700italic.ttf) format('truetype'); font-weight: 700; font-style: italic; } h1, p { font-family: 'Roboto Mono', monospace; } h1 { font-family: 'Roboto Mono', monospace; font-weight: 700; font-style: italic; }
このコードをブロックごとに調べてみましょう。
常にメインCSSファイルで最初に@font-face
at-rulesを定義してください。 @font-face
ルールの最も基本的なバージョンには、font-family
およびsrc
プロパティが必要です。 最初のブロックでは、font-family
の値としてRoboto Mono
を提供し、src
の3つのファイルへのパスをそれぞれ異なる形式で降順で提供します。優先度。
2番目のブロックでは、同じfont-family
値を提供しますが、700italic
バージョンのRobotoMonoへのパスを使用します。 次に、font-weight
とfont-style
の2つのプロパティを定義します。 これらのプロパティを使用して、この2番目のバージョンのRobotoMonoを使用する場所を定義します。
次の2つのブロックでは、<h1>
要素と<p>
要素のカスタムスタイルを定義しています。 font-family
を使用して両方を定義し、font-weight
とfont-style
を<h1>
に固有のブロックに追加する方法に注意してください。 これにより、H1
の見出しがRobotoMonoregular
ではなくRobotoMono700italic
にレンダリングされます。
ファイルを保存して閉じます。
次に、いくつかの<h1>
タグと<p>
タグを使用して小さなHTMLページを作成しましょう。
index.html
という名前の新しいファイルを作成して開きます。
nano index.html
次のコードを追加します。これにより、見出しとテキスト行が定義されます。
index.html
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>CSS @font-face</title> <link rel="stylesheet" href="style.css"> </head> <body> <h1> Roboto Mono font, 700italic </h1> <p> Roboto Mono font, regular </p> </body> </html>
ファイルを保存して閉じます。
index.html
をWebブラウザにロードします。 見出しはRobotoMono700italic
でレンダリングされ、段落テキストはRoboto Monoregular
で次のようにレンダリングされます。
Roboto Monoフォント、700イタリック
Roboto Monoフォント、通常
@font-face
プロパティが機能しているので、font-display
を使用して、フォントをロードする方法とタイミングを構成しましょう。
ステップ3—font-display
を使用してフォントの読み込みを制御する
font-display
を使用すると、フォントの読み込み方法を正確に制御できます。 これにより、カスタムフォントを使用する際のユーザーエクスペリエンスを大幅に向上させることができます。
カスタムフォントを使用している場合、ページが最初に読み込まれたときに、ユーザーはFOUT(スタイル設定されていないテキストのフラッシュ)またはFOIT(非表示のテキストのフラッシュ)のいずれかに遭遇することがあります。 一部のブラウザは、カスタムフォントがロードされていない場合でも、テキストをすぐに表示することを選択します。 完全に読み込まれると、ブラウザはカスタムフォントに戻りますが、これによりFOUTが作成されます。 他のブラウザは、カスタムフォントが読み込まれるまでテキストを短時間非表示にし、FOITを引き起こします。 時間枠内にフォントが読み込まれない場合、ブラウザはフォールバックフォントを使用します。
FOUTに対処する1つの方法は、 Font Style Matcher などのツールを使用して、フォントの変更がそれほど大幅に感じられないように、カスタムフォントにできるだけ近いフォールバックフォントを見つけることです。 ただし、font-display
プロパティを使用して、これらの問題をよりエレガントに処理できます。
読み込みの問題に対処するために、font-display
は次の5つの値のいずれかを取ります。
auto
:これはブラウザのデフォルトの動作を使用しますが、これは異なります。block
:テキストは最初は短時間非表示になりますが、使用可能になるとカスタムフォントに変更されます。 この1つの値は、無限スワップ期間を持っていると言われます。swap
:テキストが非表示になることはなく、使用可能になるとカスタムフォントに変更されます。 これにより、スワップ期間が無限になります。fallback
:テキストが非常に短い期間(ブロック期間)非表示になり、その後、短いスワップ期間があります。 カスタムフォントがスワップ期間内にロードされない場合、それはまったくロードされません。optional
:テキストの読み込みに非常に短いブロック期間(〜100ms)が与えられます。 そのブロック期間中にフォントが読み込まれない場合は、フォールバックフォントが使用され、カスタムフォントはまったく読み込まれません。 ただし、フォントは引き続きダウンロードされ、バックグラウンドでキャッシュされます。 これは、後続のページの読み込み時に、カスタムフォントがキャッシュで使用可能になり、すぐに読み込まれることを意味します。
font-display
のoptional
値は、多くのフォント読み込み状況に対する堅牢なソリューションを提供します。 それを私たち自身のCSSに追加しましょう。
style.css
を再度開きます:
nano style.css
次に、強調表示されたコードを追加します。
style.css
@font-face { font-family: 'Roboto Mono', monospace; src: url(fonts/roboto-mono-v12-latin-regular.woff2) format('woff2'), url(fonts/roboto-mono-v12-latin-regular.woff) format('woff'), url(fonts/roboto-mono-v12-latin-regular.ttf) format('truetype'); font-display: optional; } @font-face { font-family: 'Roboto Mono', monospace; src: url(fonts/roboto-mono-v12-latin-700italic.woff2) format('woff2'), url(fonts/roboto-mono-v12-latin-700italic.woff) format('woff'), url(fonts/roboto-mono-v12-latin-700italic.ttf) format('truetype'); font-weight: 700; font-style: italic; font-display: optional; } h1, p { font-family: 'Roboto Mono', monospace; } h1 { font-family: 'Roboto Mono', monospace; font-weight: 700; font-style: italic; }
これで、カスタムフォントが非常に速く読み込まれるため、ユーザーがFOUTやFOITを経験することはないか、まったく読み込まれません。 ただし、更新したり、他のページにアクセスしたりすると、すぐにダウンロードして読み込まれます。
結論
このチュートリアルでは、カスタムフォントをダウンロードし、@font-face
プロパティを使用してWebページに追加しました。 次に、font-display
プロパティを使用して、カスタムフォントの読み込み方法を管理しました。 font-display
および関連するプロパティの詳細については、 Mozilla DeveloperNetworkの関連ドキュメントを参照することを検討してください。