ページネーション
component検索結果や一覧が複数ページに分かれるとき、ページを行き来するためのナビゲーションです。いま何ページ目にいるかが色で分かります。
項目の状態
enable / hover / focus / current / disabled。現在のページは aria-current="page"、端で押せない矢印は aria-disabled="true" で指定
使用例
ページ数が少なければ全ページを並べ、多いときは .pagination-ellipsis で省略する。1 ページ目では「前へ」を aria-disabled="true" にする
ページ数が少ない場合(省略なし・全 5 ページ)
ページ数が多い場合(省略あり・全 10 ページ)
先頭ページ(「前へ」は無効)
機能
このコンポーネントの用途
一覧が複数ページに分かれるとき、ページを行き来するナビゲーション。
同一ページ内の表示切替は tab、手続きの進捗は stepper。
使用法
推奨される使い方と、やりがちな NG パターン
OK
- ✓現在ページは aria-current="page"。端では矢印を aria-disabled="true"。
- ✓省略は pagination-ellipsis で示す。
NG
- ✕現在ページもリンクで押せるようにしない → aria-current で示す。
- ✕無限スクロールで足りる場面に無理に足さない。
NG パターン — 1 ページしかないときに表示する
1 ページに収まるときはページネーション自体を表示しません。2 ページ以上になったときだけ表示します。
全件が 1 ページに収まるのにページネーションを表示すると、押せない部品だけが並び、ユーザーに「操作できそうで操作できない」迷いを生みます。
ページネーションのアクセシビリティ
<nav aria-label> + ol/li のリンク群で、現在ページは aria-current="page"、押せない端の矢印は aria-disabled、省略記号は aria-hidden にします。WCAG 2.2 全基準は アクセシビリティ ページを参照。
期待される配慮
Presentation / Adaptability / Interaction / Assistive Technology
現在ページは色だけでなく aria-current で明示。矢印は aria-label で「前/次のページ」と言語化。
rem / トークンで拡大に追従。ページ数が多い時は省略記号でコンパクトに保つ。
Tab で各リンクへ、Enter で移動。端で押せない矢印は操作対象から外れる。
nav[aria-label]+ol/li、現在地 aria-current="page"、無効矢印 aria-disabled、省略 aria-hidden。
DS が担保する機能
追加実装なしで満たされる
- ✓
<nav>+ol/li+<a>のセマンティック構造 - ✓現在ページ(
aria-current)は色+太字で強調 - ✓キーボードフォーカスリング、
aria-disabled矢印は操作不可のスタイル - ✓省略記号
.pagination-ellipsisはaria-hidden前提の設計
実装時の必須対応
プロダクト側で担保する
- !
<nav aria-label="ページネーション">で包む - !現在ページに
aria-current="page"。前/次の矢印にaria-label(「前のページ」等) - !端で押せない矢印は
aria-disabled="true"(フォーカスは残しつつ操作を無効化) - !省略記号に
aria-hidden="true"。1 ページに収まる時は表示しない
テスト方法
キーボード / スクリーンリーダー / 自動チェック
| キー | 動作 |
|---|---|
| Tab | 各ページ番号・矢印へ移動 |
| Enter | そのページへ移動 |
- SRランドマーク「ナビゲーション: ページネーション」、現在地は「現在のページ」と読まれる
- 操作省略記号(…)が読み上げられない
- 自動axe / Lighthouse で nav ラベル・
aria-current・矢印のリンク名を確認
現在地は aria-current・矢印に aria-label
達成基準:WCAG 4.1.2 名前・役割・値 / 2.4.4 リンクの目的(コンテキスト内)
現在地 aria-current="page"、矢印に aria-label。
<a class="pagination-item" href="…" aria-label="前のページ">‹</a> <a class="pagination-item" href="…" aria-current="page">2</a>
矢印に名前が無く(「リンク」としか読まれない)、現在地も aria-current が無いと分からない。
<a class="pagination-item" href="…">‹</a> <!-- aria-label なし --> <a class="pagination-item" href="…">2</a> <!-- aria-current なし -->