「表示の拡大」について

ブラウザで表示を拡大したい場合、ブラウザの表示設定や、ピンチ操作によるズーム、OSで提供されいてる拡大鏡など、さまざまな方法を利用することができます。

それぞれ挙動（拡大する要素や見え方）や使い方が異なり、混同されることも多く、[WCAGの達成基準 1.4.4: テキストのサイズ変更を理解する](https://waic.jp/translations/WCAG21/Understanding/resize-text.html)を検証する場合などに注意が必要になります。

それぞれの違いと使い方について確認できた範囲でまとめます。


## 拡大機能の種類
表示を拡大することができる機能は次の3つがあります

* 文字サイズのみ拡大/縮小するもの
* 文字を含む表示要素をすべて拡大/縮小するもの
* 拡大鏡機能やピンチ操作によって画面の一部分の範囲を拡大するもの

ここではそれぞれ「文字サイズの拡縮」「表示要素の拡縮」「表示範囲の拡縮」と呼びます。

これらの機能はOSが実装しているもの、ブラウザが実装しているものがあり、最大で次の6種類に分かれます。

1. OSによる文字サイズの拡縮
1. OSによる表示要素の拡縮
1. OSによる表示範囲の拡縮
1. ブラウザによる文字サイズの拡縮
1. ブラウザによる表示要素の拡縮
1. ブラウザによる表示範囲の拡縮

すべての環境でこの6種類が利用できるわけではありません。どのOS、ブラウザで利用できるかどうかは[提供状況](#提供状況)でまとめています。

### 機能ごとの見え方の違い
次に、「文字サイズの拡縮」「表示要素の拡縮」「表示範囲の拡縮」の3つの見え方の違いを確認します。

:::note info
キャプチャに利用したサンプル
https://output.jsbin.com/wezizex
:::

| 通常 | 文字サイズの拡縮 | 表示要素の拡縮 | 表示範囲の拡縮 |
| :--: | :--: | :--: | :--: |
| <img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/5323/3da57232-2045-40bb-4d52-11163f607356.png" width="100" alt="通常状態のスクリーンショット"> | <img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/5323/5be52ae2-4cb1-4783-c6dd-d48ab9254d8b.png" width="100" alt="文字サイズの拡縮機能を使って文字サイズのみ拡大した状態のスクリーンショット"> | <img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/5323/3c1693db-be22-52ec-23af-ca257301ff45.png" width="100" alt="表示要素の拡縮機能を使って要素を拡大した状態のスクリーンショット"> | <img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/5323/220e195b-b5a0-7237-4e05-a93092410093.png" width="100" alt="表示範囲の拡縮機能を使って画面を拡大した状態のスクリーンショット"> |

#### 文字サイズの拡縮
文字サイズの拡縮機能で拡大した場合、文字の大きさのみが拡大されています。通常と比べ画像のサイズは同じままです。コンテンツ幅は画面内に収まり、横スクロールは発生しません。

コンテンツ幅を画面幅に収めるため1行あたりの文字数は減り、文字サイズが大きくなったことで画像に対する本文の行数も6行から3行に減っています。

#### 表示要素の拡縮
表示要素の拡縮機能で拡大した場合、文字サイズとともに画像も拡大されます。しかし全体のレイアウトは画面内に収まり、横スクロールは発生しません。

コンテンツ幅を画面幅に収めるため1行あたりの文字数は減りますが、画像も拡大しているため画像に対する本文の行数は通常と同じ6行のままです。

#### 表示範囲の拡縮
表示範囲の拡縮機能で拡大した場合、コンテンツの幅と高さ、表示要素がすべて同じ比率で拡大されます。その結果コンテンツの一部分が拡大されたように表示され、コンテンツをすべて見るためには縦横のスクロールが必要になります。

## 提供状況

### スマートフォン
スマートフォンのブラウザの場合、文字サイズの拡縮/表示要素の拡縮はどちらかのみ提供されていることが多いようです。
表示範囲の拡縮はどのブラウザでも利用できますが、正確には利用している入力インターフェースに依存します。詳細は後述。

| OS | 文字サイズの拡縮 | 表示要素の拡縮 | 表示範囲の拡縮 |
| :--: | :--: | :--: | :--: |
| iOS | ◯ | ☓ | ◯ |
| Android | ◯ | ◯ | ◯ |

| OS | ブラウザ | 文字サイズの拡縮 | 表示要素の拡縮 | 表示範囲の拡縮 |
| :--: | :--: | :--: | :--: | :--: |
| iOS | Safari | ☓ | ◯ | ◯ |
| iOS | Chrome | ◯ | ☓ | ◯ |
| iOS | Firefox | ☓ | ☓ | ◯ |
| Android | Chrome | ◯ | ☓ | ◯ |
| Android | Firefox | ◯ | ☓ | ◯ |


### PC
PCのブラウザの場合、表示要素の拡縮のほか、設定によって文字サイズの拡縮を利用できるケースが多いようです。
表示範囲の拡縮はどのブラウザでも利用できますが、正確には利用している入力インターフェースに依存します。詳細は後述。

| OS | 文字サイズの拡縮 | 表示要素の拡縮 | 表示範囲の拡縮 |
| :--: | :--: | :--: | :--: |
| macOS | ☓ | ☓ | ◯ |
| Windows11 | ◯ | ◯ | ◯ |

| OS | ブラウザ | 文字サイズの拡縮 | 表示要素の拡縮 | 表示範囲の拡縮 |
| :--: | :--: | :--: | :--: | :--: |
| macOS | Chrome | ◯ | ◯ | ◯ |
| macOS | Safari | ◯ | ◯ | ◯ |
| macOS | Firefox | ◯ | ◯ | ◯ |
| Windows11 | Chrome | ◯ | ◯ | ◯ |
| Windows11 | Edge | ◯ | ◯ | ◯ |
| Windows11 | Firefox | ◯ | ◯ | ◯ |


#### ブラウザによる表示範囲の拡縮について
ブラウザによる表示範囲の拡縮は、入力インターフェースの特定のジェスチャー（トラックパッドやタッチパネルのピンチ操作など）に割り当てられている場合のみ利用できます。ブラウザのメニューやショートカットとしては提供されていないため、ジェスチャー以外では利用することができません。

キーボードショートカットやマウスジェスチャーには割り当てられていないため、次のような環境では表示範囲の拡縮を利用することが難しくなります。
* タッチパネルやトラックパッドがなく、キーボード+マウスのみのPC
* マウスを接続して操作するスマートフォン

**Magic Mouseの場合**
AppleのMagic Mouseでは、ピンチ操作ではなくマウス表面を1本指でダブルタップというジェスチャーで表示範囲の拡大することができます。（もう一度ダブルタップでもとに戻る）

「スマートズーム」と呼ばれるこの機能は、マウス接続後にmacOSの設定画面から有効化することで利用できるようになりますが、iPadOSやWindows、Androidに接続した場合では設定することができません。またiOSではそもそもMagic Mouseが認識しない(iOS17.7で確認)ため、現時点ではmacOSでのみ利用できる機能と考えられます。

**高機能マウスの場合**
多ボタンがついた高機能マウスでは、ブラウザのショートカットを任意のボタンに自由に設定することができます。しかしショートカットやメニューとして提供されていないためか、表示範囲の拡縮機能は設定できないことが多いようです。


## 各機能の使い方

* [iOS](#iOS)
* [Android](#Android)
* [macOS](#macOS)
* [windows-11](#windows-11)

### iOS
<table>
  <tr>
    <th>文字サイズの拡縮</td>
    <td>「設定」>「アクセシビリティ」>「画面表示とテキストサイズ」>「さらに大きな文字」</td>
  </tr>
  <tr>
    <th>表示要素の拡縮</td>
    <td> - </td>
  </tr>
  <tr>
    <th>表示範囲の拡縮</td>
    <td>「設定」>「アクセシビリティ」>「ズーム」</td>
  </tr>
</table>

#### iOS / Safari
<table>
  <tr>
    <th>文字サイズの拡縮</td>
    <td> - </td>
  </tr>
  <tr>
    <th>表示要素の拡縮</td>
    <td>
      <p>アドレスバーの「ぁあ（拡大アイコン）」 > 表示されたメニューの「あ（拡大）」/「ぁ（縮小）」ボタンをクリック</p>
      <p>または、「設定」>「Safari」>「ページの拡大/縮小」</p>
  </td>
  </tr>
  <tr>
    <th>表示範囲の拡縮</td>
    <td>画面上でピンチ操作</td>
  </tr>
</table>

<details>
<summary>iOS / その他のブラウザ</summary>

#### iOS / Chrome

<table>
  <tr>
    <th>文字サイズの拡縮</td>
    <td> 下部ツールバーの「⋯(その他アイコン)」>「テキストを拡大」 </td>
  </tr>
  <tr>
    <th>表示要素の拡縮</td>
    <td>-</td>
  </tr>
  <tr>
    <th>表示範囲の拡縮</td>
    <td>画面上でピンチ操作</td>
  </tr>
</table>

#### iOS / Firefox

<table>
  <tr>
    <th>文字サイズの拡縮</td>
    <td>-</td>
  </tr>
  <tr>
    <th>表示要素の拡縮</td>
    <td>-</td>
  </tr>
  <tr>
    <th>表示範囲の拡縮</td>
    <td>画面上でピンチ操作</td>
  </tr>
</table>

</details>


### Android
<table>
  <tr>
    <th>文字サイズの拡縮</td>
    <td>「設定」>「ユーザー補助」>「フォントサイズ」</td>
  </tr>
  <tr>
    <th>表示要素の拡縮</td>
    <td>「設定」>「ユーザー補助」>「表示サイズ」</td>
  </tr>
  <tr>
    <th>表示範囲の拡縮</td>
    <td>「設定」>「ユーザー補助」>「拡大」</td>
  </tr>
</table>

#### Android / Chrome
<table>
  <tr>
    <th>文字サイズの拡縮</td>
    <td>メニューバーの「⁝ (その他アイコン)」>「設定」>「ユーザー補助機能」>「テキストの拡大と縮小」</td>
  </tr>
  <tr>
    <th>表示要素の拡縮</td>
    <td>-</td>
  </tr>
  <tr>
    <th>表示範囲の拡縮</td>
    <td>画面上でピンチ操作</td>
  </tr>
</table>


<details>
<summary>Android / その他のブラウザ</summary>

#### Android / Firefox

<table>
  <tr>
    <th>文字サイズの拡縮</td>
    <td>メニューバーの「⁝ (その他アイコン)」>「設定」>「アクセシビリティ」>「フォントサイズの自動調整」をOFFにした上で、「フォントサイズ」</td>
  </tr>
  <tr>
    <th>表示要素の拡縮</td>
    <td>-</td>
  </tr>
  <tr>
    <th>表示範囲の拡縮</td>
    <td>画面上でピンチ操作</td>
  </tr>
</table>


</details>

### macOS
<table>
  <tr>
    <th>文字サイズの拡縮</td>
    <td>-</td>
  </tr>
  <tr>
    <th>表示要素の拡縮</td>
    <td>-</td>
  </tr>
  <tr>
    <th>表示範囲の拡縮</td>
    <td>「システム環境設定」>「アクセシビリティ」>「ズーム機能」</td>
  </tr>
</table>

#### macOS / Chrome
<table>
  <tr>
    <th>文字サイズの拡縮</td>
    <td>
        <p>「環境設定」>「デザイン」>「フォントサイズ」</p>
        <p>または「環境設定」>「デザイン」>「フォントをカスタマイズ」>「フォントサイズ」    </p>
    </td>
  </tr>
  <tr>
    <th>表示要素の拡縮</td>
    <td>
        <p>「表示」>「拡大」</p>
        <p>または「環境設定」>「デザイン」>「ページのズーム」</p>
        <p>またはメニューバーの「⁝ (その他アイコン)」>「ズーム」</p>
    </td>
  </tr>
  <tr>
    <th>表示範囲の拡縮</td>
    <td>-</td>
  </tr>
</table>

<details>
<summary>macOS / その他のブラウザ</summary>

#### macOS / Safari

<table>
  <tr>
    <th>文字サイズの拡縮</td>
    <td>optionキーを押しながら「表示」>「文字を拡大」</td>
  </tr>
  <tr>
    <th>表示要素の拡縮</td>
    <td>
        <p>「表示」>「拡大」</p>
        <p>または「Safari」>「環境設定」>「Webサイト」>「ページの拡大/縮小」</p>
    </td>
  </tr>
  <tr>
    <th>表示範囲の拡縮</td>
    <td>-</td>
  </tr>
</table>

#### macOS / Firefox

<table>
  <tr>
    <th>文字サイズの拡縮</td>
    <td>
        <p>「表示」>「ズーム」>「文字サイズのみ変更」を選択したあと、改めて「表示」>「ズーム」</p>
        <p>または「Firefox」 > 「設定」 > 「フォント」</p>
        <p>* 上記は連動しておらず、両方変更した場合は重複して拡大される（フォントを20pxに変更したうえで、ズームを変更すると20pxからさらに大きな値になる）</p>
    </td>
  </tr>
  <tr>
    <th>表示要素の拡縮</td>
    <td>
        <p>メニューバーの「≡（その他アイコン）」>「ズーム」</p>
        <p>または「表示」>「ズーム」>「拡大」</p>
    </td>
  </tr>
  <tr>
    <th>表示範囲の拡縮</td>
    <td>-</td>
  </tr>
</table>
</details>




### Windows 11
<table>
  <tr>
    <th>文字サイズの拡縮</td>
    <td>
        <p>スタートメニューから > 「すべてのアプリ」>「設定」>「アクセシビリティ」>「テキストのサイズ」</p>
        <p>* ただしこの設定でブラウザを確認すると、表示拡大と同じ挙動をする（画像も拡大される）</p>
    </td>
  </tr>
  <tr>
    <th>表示要素の拡縮</td>
    <td>スタートメニューから > 「すべてのアプリ」>「設定」>「システム」>「ディスプレイ」>「拡大/縮小」</td>
  </tr>
  <tr>
    <th>表示範囲の拡縮</td>
    <td>スタートメニューの「すべてのアプリ」>「Windows 簡単操作」>「拡大鏡」</td>
  </tr>
</table>

#### Windows 11 / Chrome
<table>
  <tr>
    <th>文字サイズの拡縮</td>
    <td>
        <p>「設定」>「デザイン」>「フォントサイズ」</p>
        <p>または「設定」>「デザイン」>「フォントをカスタマイズ」>「フォントサイズ」    </p>
    </td>
  </tr>
  <tr>
    <th>表示要素の拡縮</td>
    <td>
        <p>メニューバーの「⁝ (その他アイコン)」>「ズーム」</p>
        <p>またはメニューバーの「⁝ (その他アイコン)」>「設定」>「デザイン」>「ページのズーム」</p>
    </td>
  </tr>
  <tr>
    <th>表示範囲の拡縮</td>
    <td>-</td>
  </tr>
</table>


<details>
<summary>Windows11 / その他のブラウザ</summary>

#### Windows 11 / Edge

<table>
  <tr>
    <th>文字サイズの拡縮</td>
    <td>
        <p>「設定」>「外観」>「フォントサイズ」</p>
        <p>または「設定」>「外観」>「フォントのカスタマイズ」>「フォントサイズ」</p>
    </td>
  </tr>
  <tr>
    <th>表示要素の拡縮</td>
    <td>
        <p>メニューバーの「…（その他アイコン）」>「ズーム」</p>
        <p>またはメニューバーの「…（その他アイコン）」>「設定」>「外観」>「ページのズーム」</p>
    </td>
  </tr>
  <tr>
    <th>表示範囲の拡縮</td>
    <td>-</td>
  </tr>
</table>

#### Windows 11 / Firefox

<table>
  <tr>
    <th>文字サイズの拡縮</td>
    <td>設定画面から「一般」>「ズーム」>「文字サイズのみ変更」を選択したあと、メニューバーの「≡（その他アイコン）」>「ズーム」</td>
  </tr>
  <tr>
    <th>表示要素の拡縮</td>
    <td>メニューバーの「≡（その他アイコン）」>「ズーム」</td>
  </tr>
  <tr>
    <th>表示範囲の拡縮</td>
    <td>-</td>
  </tr>
</table>
</details>

## その他
* iOSでOSの文字サイズ設定をブラウザに反映させたい場合、ルート要素に `font: -apple-system-body;` かつfont-sizeを相対値で指定する必要があるため、検証時には注意が必要
    * [ルートに-apple-system-bodyを指定した場合](https://output.jsbin.com/sebezof)
    * [ルートにHiragino Kaku Gothic ProNを指定した場合](https://output.jsbin.com/necaqig)
* Androidは画面内のテキストが少ないと可変しないため、検証時には注意が必要
  * [文字数が少なくブラウザの文字サイズの拡縮が効かないケース](https://output.jsbin.com/cadasoy)
  * [文字数が多くブラウザの文字サイズの拡縮が効くケース](https://output.jsbin.com/ticajur)
  * この計算は画面幅も関係しており、`font-size(px換算) * 文字数 > 画面幅(px換算) * 4` の条件で可変になることが確認できている
    * [androidに関する詳細](https://qiita.com/a_t/items/a57a70affbf91842d2c8)
  * この計算はflex要素やtable要素ではそれぞれ別で管理されているためか、ページ全体が可変してもflex要素やtable要素では可変しない場合がある
* emやremをwidthやheight、marginに指定した場合、文字サイズ可変を設定してもブラウザによって可変しない場合がある


## 確認時のOS/ブラウザのバージョン
* 執筆時点の最新