Snippets Pagination

Bootstrap 5 Pagination Styles (6 Modern Designs)

Six modern Bootstrap 5 pagination styles: soft pills, outlined squares, underline, joined bar, compact prev/next and dots. Every control is clickable and keeps its active state.

Bootstrap 5 No jQuery Sep 2019 1.8K views

<section class="wdw-stage pg-stage">
  <div class="container" style="max-width: 960px;">
    <div class="text-center mb-5">
      <span class="wdw-eyebrow mb-3">Pagination</span>
      <h1 class="h2 wdw-heading mb-2">Pagination styles</h1>
      <p class="text-body-secondary mb-0">Six ways to page through results. Click any control to try it.</p>
    </div>

    <div class="row g-3 g-md-4">
      <div class="col-md-6">
        <div class="card wdw-card-sm h-100"><div class="card-body p-3 p-sm-4 d-flex flex-column">
          <div class="d-flex justify-content-between align-items-center mb-3"><p class="fw-semibold text-body-emphasis mb-0">Soft pills</p><span class="small text-body-secondary">Orders</span></div>
          <nav class="my-auto" aria-label="Soft pills pagination" data-pager data-pages="4" data-style="pills"><ul class="pagination pg-pills mb-0 flex-nowrap gap-1 gap-sm-2"></ul></nav>
        </div></div>
      </div>
      <div class="col-md-6">
        <div class="card wdw-card-sm h-100"><div class="card-body p-3 p-sm-4 d-flex flex-column">
          <div class="d-flex justify-content-between align-items-center mb-3"><p class="fw-semibold text-body-emphasis mb-0">Numbered with ellipsis</p><span class="small text-body-secondary">238 results</span></div>
          <nav class="my-auto" aria-label="Numbered pagination" data-pager data-pages="24" data-style="squares"><ul class="pagination pg-squares mb-0 flex-nowrap gap-1 gap-sm-2"></ul></nav>
        </div></div>
      </div>
      <div class="col-md-6">
        <div class="card wdw-card-sm h-100"><div class="card-body p-3 p-sm-4 d-flex flex-column">
          <div class="d-flex justify-content-between align-items-center mb-3"><p class="fw-semibold text-body-emphasis mb-0">Underline</p><span class="small text-body-secondary">Articles</span></div>
          <nav class="my-auto" aria-label="Underline pagination" data-pager data-pages="7" data-style="line"><ul class="pagination pg-line mb-0 flex-wrap gap-2 gap-sm-3"></ul></nav>
        </div></div>
      </div>
      <div class="col-md-6">
        <div class="card wdw-card-sm h-100"><div class="card-body p-3 p-sm-4 d-flex flex-column">
          <div class="d-flex justify-content-between align-items-center mb-3"><p class="fw-semibold text-body-emphasis mb-0">Joined bar</p><span class="small text-body-secondary">Invoices</span></div>
          <nav class="my-auto" aria-label="Joined pagination" data-pager data-pages="5" data-style="joined"><ul class="pagination pg-joined mb-0"></ul></nav>
        </div></div>
      </div>
      <div class="col-md-6">
        <div class="card wdw-card-sm h-100"><div class="card-body p-3 p-sm-4 d-flex flex-column">
          <div class="d-flex justify-content-between align-items-center mb-3"><p class="fw-semibold text-body-emphasis mb-0">Compact with page size</p><div class="d-flex align-items-center gap-2"><label for="pgSize" class="small text-body-secondary mb-0">Rows</label><select id="pgSize" class="form-select form-select-sm rounded-pill w-auto"><option>10</option><option>25</option><option>50</option></select></div></div>
          <nav aria-label="Compact pagination" data-pager data-pages="24" data-style="compact" class="d-flex align-items-center justify-content-between gap-2 gap-sm-3 my-auto">
            <button type="button" class="btn btn-outline-secondary rounded-pill px-3" data-prev>← Prev</button>
            <span class="text-body-secondary" aria-live="polite">Page <strong class="text-body-emphasis" data-current>1</strong> of 24</span>
            <button type="button" class="btn btn-primary rounded-pill px-3" data-next>Next →</button>
          </nav>
        </div></div>
      </div>
      <div class="col-md-6">
        <div class="card wdw-card-sm h-100"><div class="card-body p-3 p-sm-4 d-flex flex-column">
          <div class="d-flex justify-content-between align-items-center mb-3"><p class="fw-semibold text-body-emphasis mb-0">Dots</p><span class="small text-body-secondary">Gallery</span></div>
          <nav class="my-auto" aria-label="Dot pagination" data-pager data-pages="5" data-style="dots"><ul class="pagination pg-dots mb-0 align-items-center gap-0 flex-nowrap"></ul></nav>
        </div></div>
      </div>
    </div>
  </div>
</section>

Built on Bootstrap 5.3.8 with plain JavaScript — no jQuery. Supports light and dark mode via data-bs-theme.

Free to use in personal and commercial projects under the MIT license.