Pagination
µPagination is a flexible page navigation component, part of the µCSS framework. It supports alignment variants, sizes, responsive behavior, and borderless styling.
Usage
Pagination uses a <nav> containing a <ul> with the .pagination class. Each page is a <li> with an <a> or <span> inside.
<nav aria-label="Pagination">
<ul class="pagination">
<li class="pagination-prev"><a href="#">« Prev</a></li>
<li><a href="#">1</a></li>
<li class="active"><a href="#" aria-current="page">2</a></li>
<li><a href="#">3</a></li>
<li><a href="#">4</a></li>
<li><a href="#">5</a></li>
<li class="pagination-next"><a href="#">Next »</a></li>
</ul>
</nav>
Item states
Active page
Add .active to the <li> to indicate the current page. The active item gets the primary color as background and disables pointer events.
<li class="active"><a href="#" aria-current="page">2</a></li>
Disabled
Add .disabled to the <li> to disable an item (e.g., the "Prev" button on the first page). The item is faded and non-interactive.
<li class="pagination-prev disabled"><a href="#">« Prev</a></li>
Ellipsis
Use .pagination-ellipsis with a <span> to indicate skipped page numbers:
<nav aria-label="Pagination">
<ul class="pagination">
<li class="pagination-prev disabled"><a href="#">« Prev</a></li>
<li class="active"><a href="#" aria-current="page">1</a></li>
<li><a href="#">2</a></li>
<li><a href="#">3</a></li>
<li class="pagination-ellipsis"><span>…</span></li>
<li><a href="#">20</a></li>
<li class="pagination-next"><a href="#">Next »</a></li>
</ul>
</nav>
Alignment
By default, pagination is left-aligned. Two modifier classes change the alignment:
| Class | Effect |
|---|---|
.pagination-centered |
justify-content: center |
.pagination-end |
justify-content: flex-end |
Centered
<nav aria-label="Pagination">
<ul class="pagination pagination-centered">
<li class="pagination-prev"><a href="#">«</a></li>
<li><a href="#">1</a></li>
<li class="active"><a href="#" aria-current="page">2</a></li>
<li><a href="#">3</a></li>
<li class="pagination-next"><a href="#">»</a></li>
</ul>
</nav>
End-aligned
<nav aria-label="Pagination">
<ul class="pagination pagination-end">
<li class="pagination-prev"><a href="#">«</a></li>
<li><a href="#">1</a></li>
<li class="active"><a href="#" aria-current="page">2</a></li>
<li><a href="#">3</a></li>
<li class="pagination-next"><a href="#">»</a></li>
</ul>
</nav>
Sizes
Two size variants adjust the dimensions, padding, and font size of pagination items:
| Class | Min-width | Height | Padding | Font size |
|---|---|---|---|---|
.pagination-sm |
1.75rem | 1.75rem | 0.15rem 0.45rem |
0.75rem |
| (default) | 2.25rem | 2.25rem | 0.25rem 0.625rem |
0.875rem |
.pagination-lg |
2.75rem | 2.75rem | 0.375rem 0.8rem |
1rem |
Small
<ul class="pagination pagination-sm">...</ul>
Large
<ul class="pagination pagination-lg">...</ul>
Borderless
Remove borders from all pagination items:
<nav aria-label="Pagination">
<ul class="pagination pagination-borderless">
<li class="pagination-prev"><a href="#">«</a></li>
<li><a href="#">1</a></li>
<li class="active"><a href="#" aria-current="page">2</a></li>
<li><a href="#">3</a></li>
<li><a href="#">4</a></li>
<li class="pagination-next"><a href="#">»</a></li>
</ul>
</nav>
Responsive
Add .pagination-responsive to hide page numbers (except the active page and prev/next controls) on screens narrower than 640px:
<nav aria-label="Pagination">
<ul class="pagination pagination-responsive">
<li class="pagination-prev"><a href="#">« Prev</a></li>
<li><a href="#">1</a></li>
<li><a href="#">2</a></li>
<li class="active"><a href="#" aria-current="page">3</a></li>
<li><a href="#">4</a></li>
<li><a href="#">5</a></li>
<li class="pagination-next"><a href="#">Next »</a></li>
</ul>
</nav>
On mobile (<640px), only .pagination-prev, .pagination-next, and .active items are visible. The pagination stretches full width with justify-content: space-between.
CSS classes reference
| Class | Applied to | Description |
|---|---|---|
.pagination |
<ul> |
Base pagination container (flex, list-style none) |
.pagination-prev |
<li> |
Previous page item (bold text) |
.pagination-next |
<li> |
Next page item (bold text) |
.active |
<li> |
Current page (primary bg, non-interactive) |
.disabled |
<li> |
Disabled item (faded, non-interactive) |
.pagination-ellipsis |
<li> |
Ellipsis separator (no border) |
.pagination-centered |
<ul> |
Center-aligned pagination |
.pagination-end |
<ul> |
Right-aligned pagination |
.pagination-sm |
<ul> |
Small size variant |
.pagination-lg |
<ul> |
Large size variant |
.pagination-borderless |
<ul> |
Remove borders from items |
.pagination-responsive |
<ul> |
Hide non-essential items on mobile |
Accessibility
- Wrap pagination in a
<nav>element witharia-label="Pagination". - Add
aria-current="page"to the active page link. - The active page and disabled items have
pointer-events: noneto prevent interaction. - Focus-visible outlines (
2px solid) are applied for keyboard navigation.