タイポグラフィ

テキストにスタイルを指定しない場合、ブラウザでは独自のデフォルトのスタイルが適用されます。これはユーザー エージェント スタイルシートと呼ばれ、ブラウザによって異なる場合があります。ユーザーはテキストの表示方法を独自に設定することもできます。

行の長さを指定しない場合、ブラウザの端でテキスト行が改行されます。そのため、ウェブ上のテキストはデフォルトでレスポンシブになり、ユーザーのビューポートに合わせて流れます。

ただし、テキストが画面に収まるからといって読みやすくなるとは限りません。優れたタイポグラフィとは、テキストを適切な方法で表示するためのものです。タイポグラフィでは、使用する適切なフォントを選ぶだけでなく、ユーザーの好み、テキストのサイズ、行の長さ、テキスト行間の距離を考慮する必要があります。

テキストサイズ

ウェブ上のテキストのサイズを認識するのは困難です。

小さな画面を使っている人なら、画面の手を少し離したくらいに画面を少し近づけると安心です。

しかし、画面が大きくなればなるほど、その関係性を持たせることは難しくなります。ノートパソコン サイズの画面は閲覧者のかなり近くにあるかもしれませんが、ワイド画面のデスクトップ モニターはテレビの画面とほぼ同じサイズです。人々は、デスクトップ画面から腕の長さほど離れて座っていますが、テレビから離れて座っています。

画面からの距離は正確にわかりませんが、適切なテキストサイズを使用するようにしましょう。小さい画面には小さい文字サイズを、大きい画面には大きい文字サイズを使用します。

画面サイズが広くなったときに、メディアクエリを使用して font-size プロパティを変更できます。

@media (min-width: 30em) {
  html {
    font-size: 125%;
  }
}

@media (min-width: 40em) {
  html {
    font-size: 150%;
  }
}

@media (min-width: 50em) {
  html {
    font-size: 175%;
  }
}

@media (min-width: 60em) {
  html {
    font-size: 200%;
  }
}

テキストのスケーリング

特定のブレークポイントで固定テキストサイズを切り替えるのは、非常に煩雑です。よりレスポンシブなアプローチは、ユーザーのデバイスの幅がテキストサイズに影響を与えることです。

CSS の vw 単位は「ビューポートの幅」の略です。フォントサイズをビューポートの幅に接続すると、ブラウザの幅に比例してテキストが拡大、縮小します。このため、特定の幅のテキストサイズを予測することは困難になりますが、テキストサイズがユーザーのブラウザの幅に適していることはわかっています。

フォントサイズの宣言では vw を単独で使用しないことが重要です。

すべきでないこと
html {
  font-size: 2.5vw;
}

その場合、ユーザーはテキストのサイズを変更できません。相対単位(emremch など)にミックスすると、テキストのサイズを変更できるようになります。このような場合には、CSS の calc() 関数が適しています。

すべきこと
html {
  font-size: calc(0.75rem + 1.5vw);
}

計算はブラウザに任せましょう。このため、特定の幅のテキストサイズを正確に予測するのは困難ですが、テキストサイズは適切な範囲内に収まることはわかっています。正確なテキストサイズの計算は、ユーザーのブラウザで行われます。

しかし、狭い画面ではテキストが小さすぎ、ワイド画面ではテキストが大きすぎる可能性があります。

テキストをクランプする

テキストを縮小したり、極端に大きくしたりすることは避けたいものです。CSS の clamp() 関数を使用して、スケーリングの開始位置と終了位置を制御できます。これにより、スケーリングが特定の範囲に「クランプ」されます。

clamp() 関数は calc() 関数に似ていますが、3 つの値を取ります。中央の値は、calc() に渡す値と同じです。開始値では、最小サイズを指定します。この場合は、ユーザーが希望するフォントサイズを下回らないように 1rem を指定します。終了値は最大サイズを指定します。

html {
  font-size: clamp(1rem, 0.75rem + 1.5vw, 2rem);
}

これで、テキストサイズはユーザーの画面に比例して縮小、大きくなりますが、テキストサイズが 1rem を下回ったり 2rem を超えたりすることはありません。

行の長さ

印刷物ではありませんが、印刷の世界から教訓を得て、ウェブに応用することができます。

Robert Bringhurst 氏は、自身の古典作品「The Elements of Typographic Style」の中で、線の長さ(または尺度)について次のように述べています。

45 ~ 75 文字であれば、テキストサイズのセリフ体が配置された単一列のページに対して、十分な行長として広く認識されています。文字とスペースの両方を含めて 66 文字の行が理想的と考えられています。複数列の処理を行う場合は、平均で 40 ~ 50 文字にすることをおすすめします。

CSS で行の長さを直接設定することはできません。line-length プロパティはありません。ただし、コンテナの幅を制限することで、テキストの幅が広がりすぎないようにすることができます。max-inline-size プロパティは、このような場合に最適です。

線の長さを px などの固定単位で設定しないでください。ユーザーはフォントサイズを増減できるため、それに応じて行の長さも調整する必要があります。remch などの相対単位を使用します。

すべきでないこと
article {
  max-inline-size: 700px;
}
すべきこと
article {
  max-inline-size: 66ch;
}

幅に ch 単位を使用すると、そのフォントサイズで改行が 66 番目の文字で改行されます。

行の高さ

CSS には line-length プロパティはありませんが、line-height プロパティはあります。

テキストの行が短いほど、line-height の値は長くすることができます。しかし、長いテキスト行に大きな line-height 値を使用すると、読み手の目が 1 行の末尾から次の行の先頭に移動することが難しくなります。

article {
  max-inline-size: 66ch;
  line-height: 1.65;
}
blockquote {
  max-inline-size: 45ch;
  line-height: 2;
}

line-height 宣言で単位なしの値を使用します。これにより、行の高さが font-size に対して相対的に表示されるようになります。

すべきでないこと
line-height: 24px;
すべきこと
line-height: 1.5;

組み合わせと規模

ページの流れをわかりやすくするために、ユーザー インターフェースを作成する際は階層を優先します。おすすめの方法は、デザイン システムにタイポグラフィ スケールを組み込むことです。

ウェブフォント

書体は、自分の言葉を声にするようなものです。ウェブで最も長い期間、フォント オプションはほとんどありませんでした。選択肢はシステム フォントのみ。コンテンツのデザインに合ったウェブフォントを選択できるようになりました。

@font-face を使用して、ウェブフォント ファイルの場所をブラウザに指示します。ウェブのフォント形式には woff2 を使用します。十分にサポートされており、パフォーマンスを最大限に高められます。

@font-face {
  font-family: Roboto;
  src: url('/fonts/roboto-regular.woff2') format('woff2');
}
body {
  font-family: Roboto, sans-serif;
}

ただし、ウェブフォント ファイルを追加すると、ページの読み込み時間が増加するため、ユーザー エクスペリエンスが低下する可能性があります。デザインは、最終的なピクセルの見た目だけではありません。これらのピクセルがどのくらい速く描画されるかは、ユーザー エクスペリエンスの重要な要素です。高速で使いやすいエクスペリエンスは、優れたユーザー エクスペリエンスといえます。

フォントを読み込んでいます

ブラウザがフォント ファイルのダウンロードをできるだけ早く開始するようリクエストできます。ウェブフォント ファイルを参照する link 要素をドキュメントの head に追加します。rel 属性の値を preload にすると、そのファイルを優先するようブラウザに指示します。as 属性の値を font にすると、ファイルの種類をブラウザに伝えます。type 属性を使用すると、より具体的に指定することができます。

<link href="/fonts/roboto-regular.woff2" type="font/woff2" 
  rel="preload" as="font" crossorigin>

フォント ファイルを独自にホストする場合でも、crossorigin 属性を含める必要があります。

CSS の font-display プロパティを使用して、システム フォントからウェブフォントへの切り替え方法をブラウザに指示します。ウェブフォントが読み込まれるまでテキストをまったく表示しないようにすることもできます。システム フォントをすぐに表示し、読み込み後にウェブフォントに切り替えることもできます。どちらの戦略にも欠点があります。ウェブフォントのダウンロードが完了してからテキストを表示すると、ユーザーは長い間空白のページを見続けてしまう可能性があります。最初にシステム フォントでテキストを表示した後でウェブフォントに切り替えると、ユーザーがページのコンテンツがずれて表示される可能性があります。

しばらく待ってからテキストを表示することをおすすめします。この時間より前にウェブフォントが読み込まれた場合、テキストはウェブフォントを使用して表示され、コンテンツは変化しません。設定した時間が経過してもウェブフォントが読み込まれない場合は、少なくともユーザーがコンテンツを読むことができるように、テキストはシステム フォントを使用して表示されます。

ウェブフォントが最終的に読み込まれるたびにウェブフォントでシステム フォントを置き換える場合は、swapfont-display 値を使用します。

body {
  font-family: Roboto, sans-serif;
  font-display: swap;
}

テキストのレンダリング後もシステム フォントを維持したい場合は、font-display 値の fallback を使用します。

body {
  font-family: Roboto, sans-serif;
  font-display: fallback;
}

可変フォント

同じ書体に対して異なる太さやスタイルを使用すると、多数の個別のフォント ファイル(太さやスタイルごとに個別のフォント ファイル)を使用することになります。

可変フォントは、1 つのファイルを使用することでこの問題を解決します。レギュラー フォント、太字、極太文字などで個別のファイルを使用するのではなく、可変フォント ファイルはレスポンシブです。さまざまな重みやスタイルのスペクトルで表示するために必要な情報がすべて含まれています。

異なる太さで表示されている文字「A」。

つまり、1 つの可変フォント ファイルは通常の 1 つのフォント ファイルよりも大きくなりますが、1 つの可変フォント ファイルは複数の通常のフォント ファイルよりも小さくなると考えられます。多種多様な太さを使用している場合は、可変フォントを使用するとパフォーマンスが大幅に向上します。

ウェブで優れたタイポグラフィを作れるかどうかは、デザイナーとしてどのようなタイプを選択するかということだけではありません。レスポンシブ タイポグラフィでは、ユーザーのデバイスとネットワーク接続も考慮されます。最終的なデザインは、見た目の良さに左右されずに済みます。

レスポンシブ テキストについて学んだところで、次はレスポンシブ画像について学びます。

理解度チェック

タイポグラフィに関する知識をテストする

ビューポート内でテキストを折り返すには、スタイルを追加する必要があります。

正しい
スタイルを追加する必要はありません。
誤り
テキストはデフォルトで折り返して表示されます。スタイルは追加されません。

clamp() は、流体タイポグラフィに役立ちます。

calc() 関数を簡単に埋め込める
これは真実ですが、タイポグラフィに clamp() を使用するのは妥当な理由ではありません。
ブラウザのサポートは優れています。
これは真実ですが、タイポグラフィに clamp() を使用するのは妥当な理由ではありません。
フォントサイズを適切な最小値と最大値の間でロックしながら、中央値を拡張できます。
具体的には、テキストが小さすぎたり大きすぎたりしないようにするとともに、フォントサイズが滑らかにスケーリングされるようにします。
計算が簡単になるから。
もう一度お試しください。

このガイドで推奨されている line-height の値のタイプはどれですか。

24px
投稿には、line-height にピクセル値を使用しないことが明示的に記載されています。
2rem
rem は相対的な値ですが、行の高さが小さすぎたり大きすぎたりすることがあります。
1.5
単位のない相対値をおすすめします。
2vw
line-height としての表示位置単位は問題です。

font-display の機能

システム フォントからウェブフォントへの切り替えを管理する方法をブラウザに指示します。
カスタム フォントへの移行に役立ちます。
フォントを block または inline-block に設定できます。
フォントにディスプレイ タイプはありません。
フォントが非表示かどうかが変更されます。
フォントは非表示にできません。
リモート フォントを読み込むユーザー エクスペリエンスのタイミングを制御します。
作成者がカスタム フォントの読み込みエクスペリエンスをカスタマイズできるようになります。