Skip to content

分頁

協助使用者在多頁內容中導覽。參考 GOV.UK Pagination 的兩種變體:

  • 預設(numbered):適用搜尋結果、列表頁等同質性內容,包含頁碼、上一頁、下一頁
  • block:適用線性閱讀內容(多頁指南、連續說明),垂直堆疊上一頁/下一頁,可附描述標題

互動範例

標準頁碼

提供總頁數 total 與當前頁 current,元件自動算出頁碼與 ellipsis(…)。

在新分頁預覽

大量頁數含 ellipsis

當總頁數較多時,元件會在首頁、當前頁前後、末頁之間以 ellipsis 收合。

在新分頁預覽

首頁/末頁

在首頁時不顯示「上一頁」,末頁時不顯示「下一頁」。

當前為第 1 頁

當前為第 10 頁

Block 變體(線性內容)

線性閱讀內容如多頁指南,使用 variant="block" 並可附描述標題說明前後頁主題。

在新分頁預覽

使用方式

bash
pnpm add @gov-tw/web-components
ts
import '@gov-tw/web-components/govtw-pagination';

屬性

通用

屬性型別預設說明
variant'default' | 'block''default'變體
landmark-labelstring'頁數導覽'nav landmark 的 aria-label

variant="default"(numbered)

屬性型別預設說明
totalnumber0總頁數,≤1 時不渲染
currentnumber1當前頁碼,1-based
href-templatestringURL 模板,含 {n} 佔位符(如 ?page={n}

variant="block"

屬性型別預設說明
prev-hrefstring上一頁 href,省略表示首頁
next-hrefstring下一頁 href,省略表示末頁
prev-labelstring上一頁的描述標題
next-labelstring下一頁的描述標題

事件

無自訂事件。連結點擊由瀏覽器原生處理;SPA 框架的 router 會自動攔截 <a href> 並走 history API。

無障礙

  • Landmark:根元素 <nav>aria-label,多個分頁共存時建議自訂 landmark-label(如「搜尋結果頁數」「文章目錄頁數」)以利區分
  • 當前頁:以 aria-current="page" 標記,輔助科技會宣告「目前頁面」
  • 頁碼語意:每個頁碼連結附 aria-label="第 N 頁",避免螢幕閱讀器只唸出數字
  • rel 提示:上一頁/下一頁連結加 rel="prev" / rel="next",協助瀏覽器與爬蟲理解導覽關係
  • 觸控目標:每個項目最小 44×44px,符合 WCAG 2.5.5 AAA
  • 鍵盤:所有連結皆可 Tab 聚焦;focus 狀態為黃底(#fd0)+ 黑色粗底線,與 <govtw-link> 一致
  • 裝飾性圖示:箭頭 SVG 加 aria-hidden="true"focusable="false",不被輔助科技讀出

設計指引

何時使用

  • 搜尋結果或列表頁有多頁、需要隨機跳轉到任一頁時 → 使用 default 變體
  • 線性閱讀內容(多頁指南、連續說明)需要前後翻頁時 → 使用 block 變體

何時不使用

  • 單頁就能呈現所有內容時,不要硬切分頁
  • 內容極多(數萬筆)時,分頁體驗差,改用篩選/搜尋/分組
  • 即時更新的串流(如時間軸、訊息流),改用「載入更多」或無限滾動

設計建議

  • 預設一頁顯示 10–20 筆,避免使用者迷失
  • 避免無限滾動,分頁更利於可分享 URL 與書籤
  • 篩選/排序變更時應重設回第 1 頁
  • 更新瀏覽器 <title> 加入頁碼(如「搜尋結果(第 3 頁)」),方便輔助科技與分頁書籤辨識

相關元件

  • 連結 Link:分頁建構於連結之上,互動樣式一致