コンテンツにスキップ

ページネーション

hc-pagination は、ページリンクの平坦なリストを含む <nav> です。 現在のページは aria-current="page" で印が付きます — その 1 つの 属性が、視覚状態と支援技術へのシグナルの両方を駆動します。

別名: ページャー、ページ送り。

  • aria-current="page" — 現在のページ。視覚的には塗りつぶし、 クリック不可(pointer-events 無効)。
  • aria-disabled="true" — 境界にいるときの前 / 次リンクに適用。 あわせて href も外してください(例のとおり): CSS が消すのは ポインタイベントだけで、href が残ったアンカーは Enter で作動してしまいます。href の無い <a> は 非インタラクティブなプレースホルダー — フォーカス不能で支援技術にも スキップされ、境界ではそれが正解です。

このコンポーネントがアンカーに素の disabled を決して使わないのは、 アンカーがその属性をサポートしないからです。aria-disabled + 境界で href を出力しないテンプレートが正しいパターンで、残りは CSS がやります。

ページリンクは周辺領域の htmx スワップを駆動できます。

<div id="orders">
<table class="hc-table"></table>
<nav class="hc-pagination" aria-label="Pagination">
<a class="hc-pagination__item" href="/orders?page=1"
data-hx-get="/orders?page=1"
data-hx-target="#orders"
data-hx-swap="outerHTML"
data-hx-push-url="true">1</a>
<a class="hc-pagination__item" aria-current="page"
href="/orders?page=2">2</a>
</nav>
</div>

data-hx-push-url="true" がアドレスバーを更新するため、ディープ リンクとブラウザの戻るボタンが機能します。サーバーは #orders 領域全体を返します — テーブルに加え、aria-current と境界状態が 移動したページネーションまで。完全な契約は datagrid-pager レシピが 固定しています。

  • ラッパーは明示的な aria-label を持つ本物の <nav> です。
  • 現在の項目は aria-current="page" を使います — スクリーンリーダーは 自動で「現在のページ」と読み上げます。
  • アンカーはアンカーのままです。現在ページの href は無害で (CSS が pointer events を無効化します)、JavaScript なしでも マークアップが機能し、ユーザーが現在のビューをブックマークする 助けになります。
トークンパス用途
pagination.gap項目間のギャップ。
pagination.item-size項目の最小サイズ。
pagination.padding-xインラインパディング。
pagination.radius角丸。
pagination.font-size / font-weightタイポグラフィ。
pagination.bg / -fg / -border待機時の項目の色。
pagination.hover-bgホバーの背景。
pagination.current-bg / -fg / -border現在項目の色。
pagination.disabled-fg無効なリンクの色。
生成される CSS 変数を表示
--hc-pagination-gap | -item-size | -padding-x | -radius
--hc-pagination-font-size | -font-weight
--hc-pagination-bg | -fg | -border
--hc-pagination-hover-bg
--hc-pagination-current-bg | -current-fg | -current-border
--hc-pagination-disabled-fg
  • テーブル — ページネーションの定番のホスト。

レシピでの利用: データグリッドのページネーション