Pagination — Vanilla
Pagination with vanilla HTML. Same BEM and structure as Astro/Svelte. Ensure Rizzo CSS is loaded.
Pagination
Accessible pagination with Previous/Next, optional First/Last, page numbers, and ellipsis for long ranges. Same structure as Astro and Svelte.
Add this component
The command below includes <strong>Pagination</strong>—run it in your project directory to install this component (and the CSS if needed). No prompts.
Choose your package manager — click a tab to select, then copy the command.
Basic usage
Click any page; URL hash and current page stay in sync (syncHash).
With First / Last
Without First / Last
Many pages (ellipsis)
When totalPages exceeds maxVisible, ellipsis is shown.
First and last page
Previous/Next and First/Last are disabled on boundaries.
BEM structure
nav.pagination → ul.pagination__list → li.pagination__item. Each item contains either:
a.pagination__linkorspan.pagination__linkfor First/Previous/Next/Last (addpagination__link--prev/pagination__link--next; usespan+pagination__link--disabledwhen disabled)a.pagination__linkfor page numbers, orspan.pagination__link.pagination__link--currentfor current page (aria-current="page")span.pagination__ellipsisfor …
HTML – full (with First/Last)
<nav class="pagination" aria-label="Pagination">
<ul class="pagination__list">
<!-- Optional: First (omit if showFirstLast false) -->
<li class="pagination__item">
<a class="pagination__link pagination__link--prev" href="?page=1" aria-label="First page">First</a>
</li>
<li class="pagination__item">
<a class="pagination__link pagination__link--prev" href="?page=1" aria-label="Previous page">Previous</a>
</li>
<li class="pagination__item">
<span class="pagination__link pagination__link--current" aria-current="page">1</span>
</li>
<li class="pagination__item">
<a class="pagination__link" href="?page=2" aria-label="Page 2">2</a>
</li>
<li class="pagination__item">
<a class="pagination__link" href="?page=3" aria-label="Page 3">3</a>
</li>
<li class="pagination__item">
<a class="pagination__link pagination__link--next" href="?page=2" aria-label="Next page">Next</a>
</li>
<li class="pagination__item">
<a class="pagination__link pagination__link--next" href="?page=3" aria-label="Last page">Last</a>
</li>
</ul>
</nav> HTML – without First/Last, page 1 (Previous disabled)
<nav class="pagination" aria-label="Pagination">
<ul class="pagination__list">
<li class="pagination__item">
<span class="pagination__link pagination__link--prev pagination__link--disabled" aria-disabled="true">Previous</span>
</li>
<li class="pagination__item">
<span class="pagination__link pagination__link--current" aria-current="page">1</span>
</li>
<li class="pagination__item">
<a class="pagination__link" href="?page=2" aria-label="Page 2">2</a>
</li>
<li class="pagination__item">
<a class="pagination__link pagination__link--next" href="?page=2" aria-label="Next page">Next</a>
</li>
</ul>
</nav> HTML – many pages with ellipsis
<nav class="pagination" aria-label="Pagination">
<ul class="pagination__list">
<li class="pagination__item"><a class="pagination__link pagination__link--prev" href="?page=1" aria-label="First page">First</a></li>
<li class="pagination__item"><a class="pagination__link pagination__link--prev" href="?page=6" aria-label="Previous page">Previous</a></li>
<li class="pagination__item"><a class="pagination__link" href="?page=1" aria-label="Page 1">1</a></li>
<li class="pagination__item"><span class="pagination__ellipsis" aria-hidden="true">…</span></li>
<li class="pagination__item"><a class="pagination__link" href="?page=5" aria-label="Page 5">5</a></li>
<li class="pagination__item"><a class="pagination__link" href="?page=6" aria-label="Page 6">6</a></li>
<li class="pagination__item"><span class="pagination__link pagination__link--current" aria-current="page">7</span></li>
<li class="pagination__item"><a class="pagination__link" href="?page=8" aria-label="Page 8">8</a></li>
<li class="pagination__item"><span class="pagination__ellipsis" aria-hidden="true">…</span></li>
<li class="pagination__item"><a class="pagination__link" href="?page=20" aria-label="Page 20">20</a></li>
<li class="pagination__item"><a class="pagination__link pagination__link--next" href="?page=8" aria-label="Next page">Next</a></li>
<li class="pagination__item"><a class="pagination__link pagination__link--next" href="?page=20" aria-label="Last page">Last</a></li>
</ul>
</nav>