Skip to content
Fleetline

Pagination

Usage

Use pagination for long, stable lists people navigate by position: the work-order table, the vehicle register, audit logs. For feeds and activity streams use a "Show 20 more" button; for short lists show everything.

Anatomy

  1. Landmark — nav.pagination[aria-label] naming the list
  2. Previous / Next — .pagination__link--step (plain text when unavailable)
  3. Page links — a.pagination__link with hidden "Page "
  4. Ellipsis — .pagination__ellipsis
  5. Current page — aria-current="page": fill, border, bold
  6. Table footer (optional) — .pagination__bar with page size and range

Examples

States marked hover, focus-visible and active are frozen with .is-hover, .is-focus-visible, .is-active. Those classes share their rule with the real pseudo-class, so what you see is exactly what users get. Never use them in product code.

Pagination

First page: "Previous" is plain text, not a link.

Phones and narrow panels.

Showing 21–40 of 312 work orders

Data tables: page size, range and pages in one footer row. The range is a polite live region.

<nav class="pagination" aria-label="Pagination, work orders">
  <ul class="pagination__list">
    <li><a class="pagination__link pagination__link--step" href="?page=7" rel="prev">…Previous</a></li>
    <li><a class="pagination__link" href="?page=1"><span class="sr-only">Page </span>1</a></li>
    <li><span class="pagination__ellipsis">…</span></li>
    <li><a class="pagination__link" href="?page=8" aria-current="page"><span class="sr-only">Page </span>8</a></li>
    …
    <li><a class="pagination__link pagination__link--step" href="?page=9" rel="next">Next…</a></li>
  </ul>
</nav>

<!-- First page: Previous is not a link -->
<li><span class="pagination__link pagination__link--step" aria-disabled="true">…Previous</span></li>

API

HookValuesPurpose
.paginationblock class<nav>
.pagination--compactmodifierPrev / "Page 3 of 12" / Next
.pagination__list | __link | __link--step | __ellipsis | __icon | __statuspartsPager
.pagination__bar | __size | __select | __rangepartsData-table footer
aria-current="page"attributeCurrent page
aria-disabled="true" on a spanattributeUnavailable Previous / Next

Do and don't

"Showing 21–40 of 312 work orders"

Do say what is counted and where the reader is.

<a href="#" class="pagination__link" aria-disabled="true">Previous</a>

Don't leave a dead link on the first page — render text instead.

Accessibility

Keyboard interaction
KeyBehavior
TabMoves through the page links (unavailable Previous/Next are skipped)
EnterOpens that page

Tokens

Custom propertyPurpose
--size-control-mdLink size
--color-selected-bg | -fg | -borderCurrent page
--color-action-ghost-bg-hoverHover
--color-text-disabledUnavailable step
--input-bg | -border | -radiusPage-size select
--color-text-mutedEllipsis, range