Bootstrap 5 Pagination
Pagination
Documentation and examples for showing pagination to indicate a series of related content exists across multiple pages.
🤖 Looking for the LLM-optimized version?View llm.md
Other frameworks
CoreUI components are available as native Angular, React, and Vue components. To learn more please visit the following pages.
Overview
We use a large block of connected links for our pagination, making links hard to miss and easily scalable—all while providing large hit areas. Pagination is built with list HTML elements so screen readers can announce the number of available links. Use a wrapping<nav>
element to identify it as a navigation section to screen readers and other assistive technologies.
In addition, as pages likely have more than one such navigation section, it’s advisable to provide a descriptivearia-label
for the<nav>
to reflect its purpose. For example, if the pagination component is used to navigate between a set of search results, an appropriate label could bearia-label="Search results pages"
.
<navaria-label="Page navigation example"><ulclass="pagination"><liclass="page-item"><aclass="page-link"href="#">Previous</a></li><liclass="page-item"><aclass="page-link"href="#">1</a></li><liclass="page-item"><aclass="page-link"href="#">2</a></li><liclass="page-item"><aclass="page-link"href="#">3</a></li><liclass="page-item"><aclass="page-link"href="#">Next</a></li></ul></nav>
Working with icons
Looking to use an icon or symbol in place of text for some pagination links? Be sure to provide proper screen reader support witharia
attributes.
<navaria-label="Page navigation example"><ulclass="pagination"><liclass="page-item"><aclass="page-link"href="#"aria-label="Previous"><spanaria-hidden="true">«</span></a></li><liclass="page-item"><aclass="page-link"href="#">1</a></li><liclass="page-item"><aclass="page-link"href="#">2</a></li><liclass="page-item"><aclass="page-link"href="#">3</a></li><liclass="page-item"><aclass="page-link"href="#"aria-label="Next"><spanaria-hidden="true">»</span></a></li></ul></nav>
Disabled and active states
Pagination links are customizable for different circumstances. Use.disabled
for links that appear un-clickable and.active
to indicate the current page.
While the.disabled
class usespointer-events: none
totry to disable the link functionality of<a>
s, that CSS property is not yet standardized and doesn’t account for keyboard navigation. As such, you should always addtabindex="-1"
on disabled links and use custom JavaScript to fully disable their functionality.
<navaria-label="..."><ulclass="pagination"><liclass="page-item disabled"><aclass="page-link">Previous</a></li><liclass="page-item"><aclass="page-link"href="#">1</a></li><liclass="page-item active"aria-current="page"><aclass="page-link"href="#">2</a></li><liclass="page-item"><aclass="page-link"href="#">3</a></li><liclass="page-item"><aclass="page-link"href="#">Next</a></li></ul></nav>
You can optionally swap out active or disabled anchors for<span>
, or omit the anchor in the case of the prev/next arrows, to remove click functionality and prevent keyboard focus while retaining intended styles.
<navaria-label="..."><ulclass="pagination"><liclass="page-item disabled"><spanclass="page-link">Previous</span></li><liclass="page-item"><aclass="page-link"href="#">1</a></li><liclass="page-item active"aria-current="page"><spanclass="page-link">2</span></li><liclass="page-item"><aclass="page-link"href="#">3</a></li><liclass="page-item"><aclass="page-link"href="#">Next</a></li></ul></nav>
Sizing
Fancy larger or smaller pagination? Add.pagination-lg
or.pagination-sm
for additional sizes.
<navaria-label="..."><ulclass="pagination pagination-lg"><liclass="page-item active"aria-current="page"><spanclass="page-link">1</span></li><liclass="page-item"><aclass="page-link"href="#">2</a></li><liclass="page-item"><aclass="page-link"href="#">3</a></li></ul></nav>
<navaria-label="..."><ulclass="pagination pagination-sm"><liclass="page-item active"aria-current="page"><spanclass="page-link">1</span></li><liclass="page-item"><aclass="page-link"href="#">2</a></li><liclass="page-item"><aclass="page-link"href="#">3</a></li></ul></nav>
Alignment
Change the alignment of pagination components withflexbox utilities. For example, with.justify-content-center
:
<navaria-label="Page navigation example"><ulclass="pagination justify-content-center"><liclass="page-item disabled"><aclass="page-link">Previous</a></li><liclass="page-item"><aclass="page-link"href="#">1</a></li><liclass="page-item"><aclass="page-link"href="#">2</a></li><liclass="page-item"><aclass="page-link"href="#">3</a></li><liclass="page-item"><aclass="page-link"href="#">Next</a></li></ul></nav>
Or with.justify-content-end
:
<navaria-label="Page navigation example"><ulclass="pagination justify-content-end"><liclass="page-item disabled"><aclass="page-link">Previous</a></li><liclass="page-item"><aclass="page-link"href="#">1</a></li><liclass="page-item"><aclass="page-link"href="#">2</a></li><liclass="page-item"><aclass="page-link"href="#">3</a></li><liclass="page-item"><aclass="page-link"href="#">Next</a></li></ul></nav>
Customizing
CSS variables
Pagination now uses local CSS variables on.pagination
for enhanced real-time customization. Values for the CSS variables are set via Sass, so Sass customization is still supported, too.
--cui-pagination-padding-x:#{$pagination-padding-x};--cui-pagination-padding-y:#{$pagination-padding-y};@include rfs($pagination-font-size,--cui-pagination-font-size);--cui-pagination-color:#{$pagination-color};--cui-pagination-bg:#{$pagination-bg};--cui-pagination-border-width:#{$pagination-border-width};--cui-pagination-border-color:#{$pagination-border-color};--cui-pagination-border-radius:#{$pagination-border-radius};--cui-pagination-hover-color:#{$pagination-hover-color};--cui-pagination-hover-bg:#{$pagination-hover-bg};--cui-pagination-hover-border-color:#{$pagination-hover-border-color};--cui-pagination-focus-color:#{$pagination-focus-color};--cui-pagination-focus-bg:#{$pagination-focus-bg};--cui-pagination-focus-box-shadow:#{$pagination-focus-box-shadow};--cui-pagination-active-color:#{$pagination-active-color};--cui-pagination-active-bg:#{$pagination-active-bg};--cui-pagination-active-border-color:#{$pagination-active-border-color};--cui-pagination-disabled-color:#{$pagination-disabled-color};--cui-pagination-disabled-bg:#{$pagination-disabled-bg};--cui-pagination-disabled-border-color:#{$pagination-disabled-border-color};
SASS variables
$pagination-padding-y:.375rem;$pagination-padding-x:.75rem;$pagination-padding-y-sm:.25rem;$pagination-padding-x-sm:.5rem;$pagination-padding-y-lg:.75rem;$pagination-padding-x-lg:1.5rem;$pagination-font-size:$font-size-base;$pagination-color:var(--#{$prefix}link-color);$pagination-bg:var(--#{$prefix}body-bg);$pagination-border-radius:var(--#{$prefix}border-radius);$pagination-border-width:var(--#{$prefix}border-width);$pagination-margin-start:calc(-1*#{$pagination-border-width});// stylelint-disable-line function-disallowed-list$pagination-border-color:var(--#{$prefix}border-color);$pagination-focus-color:var(--#{$prefix}link-hover-color);$pagination-focus-bg:var(--#{$prefix}secondary-bg);$pagination-focus-box-shadow:$focus-ring-box-shadow;$pagination-focus-outline:0;$pagination-hover-color:var(--#{$prefix}link-hover-color);$pagination-hover-bg:var(--#{$prefix}tertiary-bg);$pagination-hover-border-color:var(--#{$prefix}border-color);// Todo in v6: remove this?$pagination-active-color:$component-active-color;$pagination-active-bg:$component-active-bg;$pagination-active-border-color:$component-active-bg;$pagination-disabled-color:var(--#{$prefix}secondary-color);$pagination-disabled-bg:var(--#{$prefix}secondary-bg);$pagination-disabled-border-color:var(--#{$prefix}border-color);$pagination-transition:color.15sease-in-out,background-color.15sease-in-out,border-color.15sease-in-out,box-shadow.15sease-in-out;$pagination-border-radius-sm:var(--#{$prefix}border-radius-sm);$pagination-border-radius-lg:var(--#{$prefix}border-radius-lg);
SASS mixins
@mixin pagination-size($padding-y,$padding-x,$font-size,$border-radius){--#{$prefix}pagination-padding-x:#{$padding-x};--#{$prefix}pagination-padding-y:#{$padding-y};@include rfs($font-size,--#{$prefix}pagination-font-size);--#{$prefix}pagination-border-radius:#{$border-radius};}
CoreUI vs Bootstrap
While this Pagination component is fully compatible with Bootstrap and follows its core principles, CoreUI delivers a more complete solution for modern app development.
What sets CoreUI apart from Bootstrap?
- ✅Fully compatible with Bootstrap – Built directly on Bootstrap, all classes and behaviors work as expected.
- 🧠Framework-native versions – CoreUI provides dedicated libraries forReact.js,Vue.js, andAngular, unlike Bootstrap which relies on third-party plugins for JavaScript frameworks.
- 👨💻Maintained by a full-time team – CoreUI is developed as a professional product, not a volunteer-driven project.
- 📦More built-in components – Includes additional ready-to-use components like range sliders, multi-selects, steppers, etc.
- 🛠️Sass Modules support today – CoreUI already supports Sass Modules, which are planned for Bootstrap 6.
- 🌍Better LTR/RTL support – Uses modern CSS logical properties for seamless bidirectional layout support.
- 🔒LTS (Long-Term Support) – Bootstrap now offers LTS only via paid third parties like HeroDevs, while CoreUI continues to offer long-term support natively and for free.
Whether you’re building internal tools, dashboards, or SaaS platforms — CoreUI combines the familiarity of Bootstrap with a more powerful, scalable, and production-ready ecosystem.
👉Explore CoreUI Bootstrap Components
👉Compare CoreUI vs Bootstrap