About this set
Four table footers, each suited to a different kind of data source, shown under the same two-row invoice table. Numbered pages shows the range, 41 to 60 of 248, then previous and next buttons around page links with the first and last page and gaps, and the current page filled in dark slate. Rows per page puts a page size select on the left and the range with previous and next on the right. Cursor pagination has only previous and next, with previous disabled on the first page, because a cursor-based API cannot jump to page 7 or report a total. Load more is a full-width button that says how many rows remain. Choose by what your API can do: an offset endpoint can number pages, a cursor endpoint cannot, and load more suits feeds that are read from the top. Each footer is a nav with its own label, page links carry labels such as Page 3, and the current one has aria-current=”page”. The Bootstrap version uses .pagination with the joined buttons split into separate rounded ones, and a .form-select for the page size.
What’s included
- Numbered pages with gaps and a current page
- Rows per page select with a range
- Cursor pagination with previous and next only
- Full-width load more button with a remaining count
- Bootstrap version built on .pagination and .form-select
Accessibility
Each footer is a nav landmark with a unique aria-label, page links have aria-label values like Page 3 and the current page has aria-current="page". Arrow-only buttons are labelled Previous page and Next page, the select is labelled by its visible text and has a 3:1 border, and every control shows a 2px focus outline. Each mini table has a caption and row headers. Nothing animates.
Customise it
The current page colour is #101828 on a[aria-current] (plain CSS), --bs-pagination-active-bg (Bootstrap) or the classes on the current link (Tailwind). Button size is the 34px min-width and height, and the load more colour is #4f46e5.




















