分頁 (Pagination)
- 新提案
- →
- 封閉測試
- →
- 公開測試
- →
- 已穩定
成熟度說明
- 新提案:未完成開發、請勿使用。
- 封閉測試:開發暫時性完成,可使用。可能仍有親和力或其他使用上問題待透過實測發現。
- 公開測試:開發暫時性完成,歡迎使用。具有完整親和力報告。
- 已穩定:開發完成、歡迎使用。應無任何親和力或使用上問題。
說明
- 分頁(Pagination)用於將大量內容拆分成多個頁面,並提供使用者在頁面間前後移動、或直接跳至特定頁面的導覽功能。
- 常見於搜尋結果、文章列表、資料表格等長內容清單。
- 元件設計為包含 7 個等寬且等距的元素,並排成一行以保持視覺穩定。
已知總頁數
適用於後端已知總筆數、能計算出總頁數的情境,例如搜尋結果、資料列表。
HTML
<nav aria-label="搜尋結果分頁" class="pagination">
<ul class="pagination__list">
<li class="pagination__item pagination__item--arrow">
<a href="?page=9" class="pagination__link pagination__link--prev" rel="prev" aria-label="上一頁">
<span class="pagination__chevron pagination__chevron--prev" aria-hidden="true"></span>
<span>上一頁</span>
</a>
</li>
<li class="pagination__item">
<a href="?page=1" class="pagination__link" aria-label="第 1 頁">1</a>
</li>
<li class="pagination__item pagination__item--overflow" aria-label="省略中間頁碼">
<span aria-hidden="true">…</span>
</li>
<li class="pagination__item">
<a href="?page=9" class="pagination__link" aria-label="第 9 頁">9</a>
</li>
<li class="pagination__item">
<a href="?page=10" class="pagination__link" aria-label="第 10 頁,目前頁面" aria-current="page">10</a>
</li>
<li class="pagination__item">
<a href="?page=11" class="pagination__link" aria-label="第 11 頁">11</a>
</li>
<li class="pagination__item pagination__item--overflow" aria-label="省略後續頁碼">
<span aria-hidden="true">…</span>
</li>
<li class="pagination__item">
<a href="?page=24" class="pagination__link" aria-label="最後一頁,第 24 頁">24</a>
</li>
<li class="pagination__item pagination__item--arrow">
<a href="?page=11" class="pagination__link pagination__link--next" rel="next" aria-label="下一頁">
<span>下一頁</span>
<span class="pagination__chevron pagination__chevron--next" aria-hidden="true"></span>
</a>
</li>
</ul>
</nav>未知總頁數
適用於無法預先得知總頁數的情境,例如串流資料、API 分頁。不顯示「最後一頁」,並在序列末端維持省略符號。
HTML
<nav aria-label="搜尋結果分頁" class="pagination">
<ul class="pagination__list">
<li class="pagination__item pagination__item--arrow">
<a href="?page=4" class="pagination__link pagination__link--prev" rel="prev" aria-label="上一頁">
<span class="pagination__chevron pagination__chevron--prev" aria-hidden="true"></span>
<span>上一頁</span>
</a>
</li>
<li class="pagination__item">
<a href="?page=1" class="pagination__link" aria-label="第 1 頁">1</a>
</li>
<li class="pagination__item pagination__item--overflow" aria-label="省略中間頁碼">
<span aria-hidden="true">…</span>
</li>
<li class="pagination__item">
<a href="?page=4" class="pagination__link" aria-label="第 4 頁">4</a>
</li>
<li class="pagination__item">
<a href="?page=5" class="pagination__link" aria-label="第 5 頁,目前頁面" aria-current="page">5</a>
</li>
<li class="pagination__item">
<a href="?page=6" class="pagination__link" aria-label="第 6 頁">6</a>
</li>
<li class="pagination__item">
<a href="?page=7" class="pagination__link" aria-label="第 7 頁">7</a>
</li>
<li class="pagination__item pagination__item--overflow" aria-label="省略後續頁碼">
<span aria-hidden="true">…</span>
</li>
<li class="pagination__item pagination__item--arrow">
<a href="?page=6" class="pagination__link pagination__link--next" rel="next" aria-label="下一頁">
<span>下一頁</span>
<span class="pagination__chevron pagination__chevron--next" aria-hidden="true"></span>
</a>
</li>
</ul>
</nav>簡易分頁
頁數很少時,可省略省略符號與「最後一頁」:
HTML
<nav aria-label="搜尋結果分頁" class="pagination">
<ul class="pagination__list">
<li class="pagination__item pagination__item--arrow">
<a href="?page=1" class="pagination__link pagination__link--prev" rel="prev" aria-label="上一頁">
<span class="pagination__chevron pagination__chevron--prev" aria-hidden="true"></span>
<span>上一頁</span>
</a>
</li>
<li class="pagination__item">
<a href="?page=1" class="pagination__link" aria-label="第 1 頁">1</a>
</li>
<li class="pagination__item">
<a href="?page=2" class="pagination__link" aria-label="第 2 頁,目前頁面" aria-current="page">2</a>
</li>
<li class="pagination__item">
<a href="?page=3" class="pagination__link" aria-label="第 3 頁">3</a>
</li>
<li class="pagination__item pagination__item--arrow">
<a href="?page=3" class="pagination__link pagination__link--next" rel="next" aria-label="下一頁">
<span>下一頁</span>
<span class="pagination__chevron pagination__chevron--next" aria-hidden="true"></span>
</a>
</li>
</ul>
</nav>CSS
.pagination:最外層nav容器。.pagination__list:頁碼清單(ul)。.pagination__item:單一頁碼項目(li)。.pagination__item--arrow:上一頁、下一頁的項目。.pagination__item--overflow:省略中間頁碼的項目,用以顯示「…」符號。.pagination__link:頁碼連結(a)。.pagination__link--prev、.pagination__link--next:上一頁、下一頁連結。
使用規範
- 頁數較少時縮減元素:若總頁數少於 7 頁,應移除多餘的元素,僅顯示實際頁數。
- 標示當前頁面:必須明確標示使用者當前所在的頁碼。
- 首末頁隱藏箭頭:當位於第一頁時,隱藏「上一頁」連結;當位於最後一頁時,隱藏「下一頁」連結。
- 鄰近頁面:在當前頁碼的左右兩側,必須始終顯示其相鄰的頁碼連結
- 使用省略號標示缺失頁面:當頁碼序列不連續時,應使用省略符號來代表中間缺失的頁面。
- 已知總頁數的省略位置:省略符號僅能出現在第一頁之後或最後一頁之前
- 未知總頁數的省略位置:最後一個元素固定顯示為省略符號, 當頁碼進入第四頁以上時, 當前頁碼應固定出現在元件正中間
親和力
- 使用
<nav>元素並加上aria-label(例如「搜尋結果分頁」),使其成為頁面地標(landmark),讓輔助科技使用者可快速定位。當頁面存在多組分頁時,務必以不同的aria-label加以區分。 - 頁碼以
<ul>/<li>原生清單語意呈現。 - 每個頁碼連結透過
aria-label補充完整語意。 - 目前所在頁碼以
aria-current="page"標示,並於aria-label附加「目前頁面」。 - 上一頁、下一頁連結加上
rel="prev"、rel="next"屬性,協助輔助科技理解頁面關係。 - 與省略符號以
aria-hidden="true"隱藏,避免干擾朗讀;省略項目本身則以aria-label="省略中間頁碼"補上有意義的說明。 - 連結最小點擊區域不小於 2.5rem × 2.5rem。
- 提供清楚的鍵盤焦點外觀。