Webタイポグラフィ入門

「なんとなく読みにくい」「なんとなくダサい」——Webサイトを見ていてそう感じるとき、その原因の多くはタイポグラフィにある。フォントの選択・サイズ・行間・文字間隔。これらをコントロールできるだけで、デザインのクオリティは段違いに変わる。本記事では、Webデザインにおけるタイポグラフィの基礎を体系的に解説する。

タイポグラフィとは何か

タイポグラフィ(typography)とは、文字を使ったコミュニケーションを視覚的に最適化する技術・技法の総称だ。単に「フォントを選ぶこと」ではなく、サイズ・行間・文字間隔・カラー・配置など、文字に関わるあらゆる視覚要素を統合的にコントロールする考え方を指す。

活版印刷の時代から始まったタイポグラフィの歴史は、デジタルの時代に入っても本質的には変わっていない。「読む人のために文字を整える」——その目的は一貫している。

フォントとタイプフェイスの違い

日常会話ではほぼ同義に使われるが、厳密には区別がある。タイプフェイス(typeface)はデザインそのもの——つまり「Noto Sans JP」というデザインのこと。フォント(font)は、そのタイプフェイスの特定のウェイト・サイズの実装のことだ。「Noto Sans JP Bold 16px」が「フォント」に相当する。

現代のWeb開発では「フォント」と「タイプフェイス」を区別することはほとんどない。CSSの font-family プロパティもタイプフェイスを指している。混用して問題ない。

フォントの種類を知る

フォントには大きく分けてセリフ体・サンセリフ体・等幅フォント・手書き体の4種類がある。Webデザインで主に使うのは最初の3つだ。それぞれの特徴を理解することが、適切な選択の第一歩になる。

セリフ体(明朝系)

文字の端に「セリフ」と呼ばれる小さな飾りが付いているフォント。日本語の明朝体に相当する。伝統的・格調・信頼感といった印象を与え、長文の印刷物では可読性が高い。スクリーン表示では低解像度環境で読みにくくなることがあるが、Retinaディスプレイが普及した現在は改善されている。

代表例: Times New Roman、Georgia、游明朝、ヒラギノ明朝、Noto Serif JP

サンセリフ体(ゴシック系)

セリフのない、シンプルな字形のフォント。日本語のゴシック体に相当する。モダン・クリーン・読みやすいという印象を与え、スクリーン表示との相性が非常に良い。Webデザインではサンセリフ体が主流だ。

代表例: Helvetica、Roboto、Inter、Noto Sans JP、游ゴシック、ヒラギノ角ゴ

等幅フォント(モノスペース)

すべての文字が同じ横幅を持つフォント。コードや数値を並べたとき列が揃うため、プログラムのソースコードや技術文書に使われる。Webでは主に <code><pre> 要素に適用する。

代表例: Courier New、Fira Code、Source Code Pro、JetBrains Mono

The quick brown fox jumps. 読みやすい文章を作るために。
セリフ体 — Georgia
The quick brown fox jumps. 読みやすい文章を作るために。
サンセリフ体 — System UI
The quick brown fox jumps. 読みやすい文章を。
等幅フォント — Courier New

Webフォントの仕組み

Webフォントとは、ユーザーのデバイスにインストールされていなくても、サーバーから配信されて表示できるフォントのことだ。CSSの @font-face ルールによって実現される。

/* @font-face の基本構文 */ @font-face { font-family: 'MyFont'; src: url('/fonts/myfont.woff2') format('woff2'), url('/fonts/myfont.woff') format('woff'); font-weight: 400; font-style: normal; /* フォント読み込み中にフォールバックフォントを表示 */ font-display: swap; }

font-display: swap は重要な設定だ。フォントの読み込みが遅い場合に代替フォントを先に表示することで、ページがフォント読み込みでフリーズする現象(FOIT: Flash of Invisible Text)を防ぐ

現代ではWOFF2形式が標準となっており、高い圧縮率でファイルサイズを小さく保てる。ほぼすべてのモダンブラウザがサポートしている。

Google Fontsを使う

Google Fontsは無料で使えるWebフォントサービスで、1,500以上のフォントが揃っている。サーバーへの配信もGoogleが行うため、自前でフォントファイルをホストする必要がない。個人・商用問わず無料で利用できる点も大きな魅力だ。

日本語フォントの選択

日本語フォントは文字数が多い(数万文字)ため、英語フォントと比べてファイルサイズが格段に大きい。Google Fontsでは日本語フォントもサブセット化(必要な文字だけを含む)して配信されるが、それでも英語フォントよりは重い。使いたい場面を絞って採用するのがポイントだ。

Noto Sans JP

Noto Serif JP

M PLUS 1p

Zen Maru Gothic

Shippori Mincho

読みやすさと汎用性の最高バランス。最もよく使われる

格式ある印象の明朝体。ブログ・コラム向き

柔らかく親しみやすいゴシック体。カジュアルな場面に

丸みのある字形。子ども向け・ポップなデザインに

本文向けの美しい明朝体。長文読書体験を重視する記事に

パフォーマンスの最適化

Google Fontsを使う際は読み込みパフォーマンスへの配慮が必要だ。最適化されていないと、フォントの読み込みがページ表示をブロックしてしまう。

フォントのウェイトを必要以上に読み込まないよう注意してください。wght@100..900(全ウェイト)は非常に重くなります。実際に使うウェイトだけを指定しましょう。

フォントサイズと行間

タイポグラフィで最も影響が大きいのが、フォントサイズと行間の設定だ。この2つが正しく設定されているだけで、同じフォントでも「プロっぽい」印象になる。逆に言えば、ここがずれているとどんな高品質なフォントを使っても読みにくい。

読みやすさの数値ガイドライン

長年の研究と実践から導き出された、読みやすさのためのガイドラインを紹介する。

スマートフォンのブラウザは16px未満のフォントを自動拡大する場合がある。本文には font-size: 1rem(=16px)以上を設定するのが基本だ。長文を読ませる記事やブログでは 1.0625rem(17px)〜 1.125rem(18px)がより読みやすい。 本文の行間は 1.61.8 が適切とされている。日本語は漢字の密度が高いため、英語テキストよりやや広めの行間が読みやすい。見出しには 1.21.4 が適切で、本文と同じ値を使うと間延びして見える。 1行に収める文字数が多すぎると、行の折り返し追跡が難しくなる。日本語では1行30〜40字、英語では60〜75文字が読みやすい幅の目安だ。CSSでは max-width: 40emmax-width: 70ch などで制御できる。 テキストと背景のコントラスト比はアクセシビリティ基準(WCAG AA)で4.5:1以上が求められる。Chrome DevToolsのアクセシビリティパネルや専用ツールで確認する習慣をつけよう。
2rem 大見出し(h1)
1.5rem 中見出し(h2)
1.2rem 小見出し(h3)
1rem 本文テキスト。読みやすさと情報密度のバランスが取れた基準サイズ。
0.85rem 補足・キャプション・注釈。メインの情報から一歩引いた存在感で。

フォントのペアリング

複数のフォントを組み合わせるペアリングは、タイポグラフィの応用技術だ。見出しと本文に異なるフォントを使うことで、視覚的なリズムと階層感が生まれる。ただし組み合わせが多すぎると散漫な印象になる。1ページに使うフォントは2〜3種類までを原則とする。

見出しと本文の組み合わせ

一般的なペアリングのパターンは「コントラストを持たせる」か「同系統でまとめる」かの2種類だ。どちらが正解ということはなく、サイトの目的やトーンに合わせて選ぶ。

見出し: セリフ体(格調・個性)
本文: サンセリフ体(読みやすさ)

例: Noto Serif JP × Noto Sans JP
  游明朝 × 游ゴシック

見出しに個性を出しつつ、本文は読みやすく保つ。メリハリのある紙面になる。

見出し + 本文: 同じファミリーのウェイト違い

例: Noto Sans JP 700 × Noto Sans JP 400

フォントを1種類に絞り、太さだけで階層を表現する。シンプルで失敗がない。

  • Noto Serif JP × Noto Sans JP — 同じNotoファミリーなので字形が調和しやすい。ブログ・コラム向き
  • 游明朝 × 游ゴシック — 日本語向けに設計された上品なペア。読書体験を重視する記事に
  • Zen Maru Gothic × M PLUS 1p — 親しみやすい同系統の丸ゴシック。カジュアルなサービスに
  • Playfair Display × Lato — エレガントなセリフ × 読みやすいサンセリフ。ファッション・ライフスタイル系に定番
  • Montserrat × Source Serif 4 — 幾何学的サンセリフ × 読みやすい明朝。テック系ブログに人気
  • Inter × Inter — 1種類をウェイト違いで使いまわす。シンプルで失敗がない
  • 似た系統のフォントを2種類 — ArilaとHelveticaのように「なぜ混在している?」と感じさせる組み合わせは避ける
  • 手書き体を本文に使う — 手書きフォントは読みにくく、数行以上の本文には不向き。装飾的な見出しに限定する
  • 3種類以上を組み合わせる — 意図のない多フォント混在はデザインの一貫性を損なう

CSSでの実装

概念を理解したら、実際のCSSでどう実装するかを見ていこう。保守性と一貫性を保つための実装パターンを紹介する。

font-family スタック

font-family プロパティには複数のフォントをカンマ区切りで指定できる。先頭から順に「このフォントが使えるか」を確認し、使えるものが適用される仕組みだ。最後に必ずジェネリックファミリー(serifsans-serif)を指定しておく。

/* 日本語サイト向けのモダンなフォントスタック */ body { font-family: 'Noto Sans JP', /* Webフォント (Google Fonts) */ 'Hiragino Sans', /* macOS / iOS */ 'Hiragino Kaku Gothic ProN', 'Yu Gothic Medium', /* Windows 10+ */ 'Yu Gothic', 'Meiryo', sans-serif; } /* コードブロック用 */ code, pre { font-family: 'JetBrains Mono', 'Fira Code', 'Source Code Pro', 'Consolas', /* Windows */ 'Monaco', /* macOS */ monospace; }

CSS変数でのタイポグラフィ管理

フォントに関する設定はCSS変数にまとめておくと、サイト全体の一貫性を保ちやすく、変更も容易になる。カラーパレットと同じ :root にまとめて定義するのが一般的だ。

:root { /* フォントファミリー */ --font-main: 'Noto Sans JP', 'Hiragino Sans', sans-serif; --font-code: 'JetBrains Mono', 'Fira Code', monospace; /* タイプスケール */ --text-xs: 0.75rem; /* 12px */ --text-sm: 0.875rem; /* 14px */ --text-base: 1rem; /* 16px */ --text-lg: 1.125rem; /* 18px */ --text-xl: 1.25rem; /* 20px */ --text-2xl: 1.5rem; /* 24px */ --text-3xl: 2rem; /* 32px */ /* 行間 */ --leading-tight: 1.3; --leading-normal: 1.7; --leading-loose: 1.9; } /* 使用例 */ body { font-family: var(--font-main); font-size: var(--text-base); line-height: var(--leading-normal); }

タイポグラフィのCSS変数はカラーパレットと同じ :root にまとめて定義すると管理しやすい。色・サイズ・間隔・フォントを変数化してシステム化する手法は「デザイントークン」と呼ばれ、大規模プロジェクトでも標準的な考え方となっている。

バリアブルフォントの活用

バリアブルフォント(variable fonts)は、ウェイト・幅・斜体などの軸を連続的に変化させられる新しい形式のフォントだ。通常であれば Regular・Bold・Light と3ファイル必要なところを、1ファイルで対応できる。

/* バリアブルフォントの使用例 */ @font-face { font-family: 'Inter'; src: url('/fonts/Inter.woff2') format('woff2-variations'); font-weight: 100 900; /* 使用できるウェイトの範囲 */ font-style: normal; font-display: swap; } /* ウェイトをアニメーションさせることも可能 */ .hover-weight { font-variation-settings: 'wght' 400; transition: font-variation-settings 0.3s ease; } .hover-weight:hover { font-variation-settings: 'wght' 700; }

Google Fontsの多くのフォントはすでにバリアブルフォント形式で配信されている。wght@400;700 と個別指定するより、wght@400..700 と範囲指定した方がキャッシュ効率が良くなる場合もある。

アクセシビリティとフォント

タイポグラフィはアクセシビリティに直接影響する。「すべてのユーザーに読みやすい文字を届ける」という意識が、良いタイポグラフィの根底にある。

font-size: 16px と書くと、ユーザーがブラウザの文字サイズを大きく設定しても反映されない。font-size: 1rem のような相対単位を使うことで、ユーザーの設定を尊重できる。px は使わない、という原則を守ろう。 背景色とテキスト色のコントラスト比がWCAG AAレベルの4.5:1を満たしているか確認する。18px以上の大きな文字・太字テキストは3:1でもよい。確認には Chrome DevTools のアクセシビリティパネルや「Colour Contrast Analyser」が便利だ。 補足テキストでも 0.75rem(12px)以下は避けたい。視力に不安のあるユーザーが読めなくなるだけでなく、モバイルでタップ操作もしにくくなる。 横幅を制限しないと、広いモニターで1行が非常に長くなってしまう。max-width: 70ch 程度の制限を本文コンテナに設けることで、すべてのユーザーに読みやすい行長を保てる。

よくある失敗と対処法

Webタイポグラフィでよく見かける失敗パターンをまとめた。自分のサイトを見直すチェックリストとしても活用してほしい。

デフォルトの line-height: 1.2 程度では、日本語テキストは非常に詰まって見える。本文には最低でも 1.6、読み物コンテンツなら 1.751.9 を設定しよう。

逆に見出しの行間が広すぎるケースも多い。見出しは 1.21.4 で十分だ。

「カジュアルな部分にはポップなフォント」「コードにはモノスペース」「タイトルに英語フォント」……と増やしていくと、すぐに4〜5種類になる。原則として2種類までに絞り、ウェイトのバリエーションで階層を表現する方が整って見える。

フォントサイズを px で固定すると、ユーザーのブラウザ設定を無視することになる。rem を基本単位とし、レイアウトの都合で em を使い分けると良い。

フルワイドで横に長い文章は非常に読みにくい。本文コンテナには max-width: 40rem70ch 程度の制限をかけよう。ch 単位は「0の文字幅を1とした単位」で、文字数ベースで幅を指定できる。

日本語フォントには本来のイタリック体が存在しない。ブラウザが強制的に斜体に変換する「フェイクイタリック」は字形が崩れる。日本語テキストで強調したい場合は太字や色の変化を使おう。

まとめ

タイポグラフィは地味に見えて、デザインの印象を決定的に左右する要素だ。今日紹介した内容を振り返ると:

  • フォントにはセリフ・サンセリフ・等幅の3種類があり、それぞれ用途が異なる
  • Webフォントは @font-facefont-display: swap を正しく設定する
  • 本文は 16px以上・行間1.6以上 が読みやすさの基準
  • フォントは2〜3種類までに絞り、ウェイトで階層を作る
  • CSS変数でタイポグラフィをシステム化すると保守しやすい
  • アクセシビリティのためにremを使い・コントラストを確保する

タイポグラフィの目的は伝達だ。装飾は副産物に過ぎない。

最初から完璧を目指す必要はない。まず本文の行間とフォントサイズを見直すだけで、見違えるほど読みやすくなる。一つずつ整えていこう。

参考文献・注記

FOITとは "Flash of Invisible Text" の略。フォント読み込み中にテキストが一瞬消える現象。font-display: swap を使うと代わりにFOUT(Flash of Unstyled Text)が起きるが、コンテンツが読めるためユーザー体験は向上する。 WCAG 2.1 達成基準 1.4.3「コントラスト(最低限)」に定められる。Level AA が一般的な目標水準。大きな文字(18pt以上または太字14pt以上)は3:1が基準となる。