Pagination
Paginationは、大量のデータやコンテンツをページ単位で分割し、ユーザーが任意のページに移動できるナビゲーションコンポーネントです。 表示するページ数の幅や端の範囲を細かく設定でき、省略記号(…)を含むページ範囲を自動で計算します。
3
Variants
5
Sizes
4
Navigation
Pure
React
Playground
Preview
DdefaultPage 1/20
Variant
Color
Size
Radius
Pages
Options
const [page, setPage] = useState(1)
<Pagination total={20} value={page} onChange={setPage}>
<Pagination.Content>
<Pagination.Item>
<Pagination.Previous />
</Pagination.Item>
<Pagination.Items />
<Pagination.Item>
<Pagination.Next />
</Pagination.Item>
</Pagination.Content>
</Pagination>Variants
Default
アクティブページにソリッド背景で塗りつぶし。最も一般的なスタイル。
標準UI
Outline
ボーダー付き。アクティブはソリッド背景で塗りつぶし。
フォーム・リスト
Ghost
アクティブは控えめなハイライト。最小限の視覚的存在感。
補助UI
Sizes
xs高さ28px
フォント12px
アイコン14px
sm高さ32px
フォント13px
アイコン14px
default高さ36px
フォント14px
アイコン16px
lg高さ40px
フォント14px
アイコン16px
xl高さ48px
フォント16px
アイコン16px
| Size | 高さ | フォント | アイコン | プレビュー |
|---|---|---|---|---|
xs | 28px | 12px | 14px | |
sm | 32px | 13px | 14px | |
default | 36px | 14px | 16px | |
lg | 40px | 14px | 16px | |
xl | 48px | 16px | 16px |
Features
Edge Navigation (withEdges)
先頭・末尾へのジャンプボタンを表示。大量ページで素早く移動。
<Pagination total={20} defaultValue={10} withEdges>
<Pagination.Content>
<Pagination.Item><Pagination.First /></Pagination.Item>
<Pagination.Item><Pagination.Previous /></Pagination.Item>
<Pagination.Items />
<Pagination.Item><Pagination.Next /></Pagination.Item>
<Pagination.Item><Pagination.Last /></Pagination.Item>
</Pagination.Content>
</Pagination>Loop Navigation (loop)
最後→最初、最初→最後の循環ナビゲーション。
<Pagination total={5} defaultValue={5} loop>
<Pagination.Content>
<Pagination.Item><Pagination.Previous /></Pagination.Item>
<Pagination.Items />
<Pagination.Item><Pagination.Next /></Pagination.Item>
</Pagination.Content>
</Pagination>Disabled State
全操作を無効化。データ読み込み中などに使用。
<Pagination total={10} defaultValue={3} disabled>
<Pagination.Content>
<Pagination.Item><Pagination.Previous /></Pagination.Item>
<Pagination.Items />
<Pagination.Item><Pagination.Next /></Pagination.Item>
</Pagination.Content>
</Pagination>Custom Icons
icon propで内蔵アイコンを任意のReactNodeに差し替え。
<Pagination total={10} defaultValue={5}>
<Pagination.Content>
<Pagination.Item>
<Pagination.Previous icon={
<svg className="icon-sm" fill="none" viewBox="0 0 24 24" stroke="currentColor" strokeWidth={2}>
<path strokeLinecap="round" strokeLinejoin="round" d="M10 19l-7-7m0 0l7-7m-7 7h18" />
</svg>
} />
</Pagination.Item>
<Pagination.Items />
<Pagination.Item>
<Pagination.Next icon={
<svg className="icon-sm" fill="none" viewBox="0 0 24 24" stroke="currentColor" strokeWidth={2}>
<path strokeLinecap="round" strokeLinejoin="round" d="M14 5l7 7m0 0l-7 7m7-7H3" />
</svg>
} />
</Pagination.Item>
</Pagination.Content>
</Pagination>API
Component Structure
Pagination— Pure React.Content.Item.LinkProps.PreviousProps.NextProps.FirstProps.LastProps.Ellipsis.Items
.Contentページリストコンテナ.Itemページアイテムラッパー.LinkPropsページ番号ボタン(page prop).PreviousProps前へボタン.NextProps次へボタン.FirstProps最初へボタン.LastProps最後へボタン.Ellipsis省略記号.Items自動ページネーションProps
Pagination
total1number総ページ数
valueundefinednumber現在のページ(制御モード)
defaultValue1number初期ページ(非制御モード)
onChangeundefined(page: number) => voidページ変更時のコールバック
siblings1number現在ページの両側に表示するページ数
boundaries1number先頭・末尾に常に表示するページ数
size"default""xs" | "sm" | "default" | "lg" | "xl"コンポーネントのサイズ (28/32/36/40/48px)
variant"default""default" | "outline" | "ghost"ビジュアルバリアント
color"default""default" | "primary"アクティブページの色
radius"md""sm" | "base" | "md" | "lg" | "xl" | "full"ボーダーの角丸
disabledfalseboolean全操作を無効化
withControlstrueboolean前へ・次へボタンの表示
withEdgesfalseboolean最初・最後ジャンプボタンの表示
loopfalseboolean最後→最初のループ移動
| Name | Type | Default | Description |
|---|---|---|---|
total | number | 1 | 総ページ数 |
value | number | undefined | 現在のページ(制御モード) |
defaultValue | number | 1 | 初期ページ(非制御モード) |
onChange | (page: number) => void | undefined | ページ変更時のコールバック |
siblings | number | 1 | 現在ページの両側に表示するページ数 |
boundaries | number | 1 | 先頭・末尾に常に表示するページ数 |
size | "xs" | "sm" | "default" | "lg" | "xl" | "default" | コンポーネントのサイズ (28/32/36/40/48px) |
variant | "default" | "outline" | "ghost" | "default" | ビジュアルバリアント |
color | "default" | "primary" | "default" | アクティブページの色 |
radius | "sm" | "base" | "md" | "lg" | "xl" | "full" | "md" | ボーダーの角丸 |
disabled | boolean | false | 全操作を無効化 |
withControls | boolean | true | 前へ・次へボタンの表示 |
withEdges | boolean | false | 最初・最後ジャンプボタンの表示 |
loop | boolean | false | 最後→最初のループ移動 |
Pagination.Link
pageundefinednumber遷移先のページ番号
isActiveautobooleanアクティブ状態(省略時はContextから自動判定)
| Name | Type | Default | Description |
|---|---|---|---|
page | number | undefined | 遷移先のページ番号 |
isActive | boolean | auto | アクティブ状態(省略時はContextから自動判定) |
Pagination.Previous / Pagination.Next / Pagination.First / Pagination.Last
iconBuilt-in SVG iconReactNodeカスタムアイコン
| Name | Type | Default | Description |
|---|---|---|---|
icon | ReactNode | Built-in SVG icon | カスタムアイコン |
Anatomy
1
2
3
Prev4
17
…4
5
56
…
10
6
NextHeight
36pxMin width
min-w-9Gap
gap-1Icon
icon-sm1
Root
navコンテナ
2
Content
フレックスリスト
3
Prev / Next
前後ボタン
4
Page Item
ページ番号
5
Active Page
現在ページ
6
Ellipsis
省略記号
Best Practices
✓
推奨
- ✓データの総件数が多い場合にページネーションを使用する
- ✓現在のページ位置を明確に表示する
- ✓siblings・boundariesで適切なページ範囲を設定する
- ✓大量ページの場合はwithEdgesで先頭・末尾ジャンプを提供する
✕
避けるべき
- ✗少量のデータにページネーションを使わない(全件表示推奨)
- ✗ページ遷移時にスクロール位置をリセットしない
- ✗全ページ番号を一度に表示しない(siblings/boundariesを活用)
- ✗無限スクロールとの併用は避ける
Accessibility
キーボード操作
すべてのページボタンは
Tabキーでフォーカス移動でき、EnterまたはSpaceで選択できます。 disabled状態ではフォーカスが当たりません。ARIA / WCAG
role="navigation"nav要素に設定aria-label="pagination"ナビゲーション識別aria-current="page"現在ページに設定aria-label="Go to page N"各ボタンに設定- default 36px、lg 40px以上 (WCAG 2.5.8準拠)
aria-hidden="true"Ellipsisに設定