Open demo

CSS code

HTML
<div><span class="lbl">Bordered</span><nav aria-label="Pagination">
<div class="pg"><a href="#" aria-label="Previous page">‹</a><a href="#">1</a><a href="#">2</a><a href="#" aria-current="page">3</a><a href="#">4</a><a href="#">5</a><span class="gap">…</span><a href="#">24</a><a href="#" aria-label="Next page">›</a></div></nav></div>

<div><span class="lbl">Accent glow</span><nav aria-label="Pagination">
<div class="pg glow"><a href="#" aria-label="Previous page">‹</a><a href="#">1</a><a href="#">2</a><a href="#" aria-current="page">3</a><a href="#">4</a><a href="#">5</a><span class="gap">…</span><a href="#">24</a><a href="#" aria-label="Next page">›</a></div></nav></div>

<div><span class="lbl">Ghost</span><nav aria-label="Pagination">
<div class="pg ghost"><a href="#" aria-label="Previous page">‹</a><a href="#">1</a><a href="#">2</a><a href="#" aria-current="page">3</a><a href="#">4</a><a href="#">5</a><span class="gap">…</span><a href="#">24</a><a href="#" aria-label="Next page">›</a></div></nav></div>
CSS
.pg{display:inline-flex;flex-wrap:wrap;align-items:center;gap:6px}
.pg a{box-sizing:border-box;display:grid;place-items:center;min-width:38px;height:38px;padding:0 11px;text-decoration:none;
  font-size:.88rem;font-weight:600;color:#a8b0c0;border-radius:9px;background:#161b23;
  border:1px solid #232a36;transition:background .15s,color .15s,border-color .15s}
.pg a:hover{background:#1d2530;color:#e6e9ef}
.pg a:focus-visible{outline:2px solid #60a5fa;outline-offset:2px}
.pg .gap{min-width:26px;color:#768196;display:grid;place-items:center;height:38px;font-weight:600}
.pg a[aria-current]{background:#1d4ed8;border-color:#3b82f6;color:#fff}
.glow a[aria-current]{box-shadow:0 0 14px rgba(59,130,246,.45)}
.ghost a{background:transparent;border-color:transparent}
.ghost a:hover{border-color:#3b465a}
.ghost a[aria-current]{background:transparent;color:#22d3ee;border-color:#22d3ee}

@media(prefers-reduced-motion:reduce){.pg a{transition:none}}

Bootstrap 5 code

Requires: Bootstrap 5.3.8 CSS

HTML
<div><span class="lbl">Bordered</span>
<nav aria-label="Pagination">
<ul class="pagination pagination-dark mb-0">
  <li class="page-item"><a class="page-link" href="#" aria-label="Previous page">‹</a></li>
  <li class="page-item"><a class="page-link" href="#">1</a></li>
  <li class="page-item"><a class="page-link" href="#">2</a></li>
  <li class="page-item"><a class="page-link active" href="#" aria-current="page">3</a></li>
  <li class="page-item"><a class="page-link" href="#">4</a></li>
  <li class="page-item"><a class="page-link" href="#">5</a></li>
  <li class="page-item disabled page-gap"><span class="page-link">…</span></li>
  <li class="page-item"><a class="page-link" href="#">24</a></li>
  <li class="page-item"><a class="page-link" href="#" aria-label="Next page">›</a></li>
</ul>
</nav></div>

<div><span class="lbl">Accent glow</span>
<nav aria-label="Pagination">
<ul class="pagination pagination-dark pagination-glow mb-0">
  <li class="page-item"><a class="page-link" href="#" aria-label="Previous page">‹</a></li>
  <li class="page-item"><a class="page-link" href="#">1</a></li>
  <li class="page-item"><a class="page-link" href="#">2</a></li>
  <li class="page-item"><a class="page-link active" href="#" aria-current="page">3</a></li>
  <li class="page-item"><a class="page-link" href="#">4</a></li>
  <li class="page-item"><a class="page-link" href="#">5</a></li>
  <li class="page-item disabled page-gap"><span class="page-link">…</span></li>
  <li class="page-item"><a class="page-link" href="#">24</a></li>
  <li class="page-item"><a class="page-link" href="#" aria-label="Next page">›</a></li>
</ul>
</nav></div>

<div><span class="lbl">Ghost</span>
<nav aria-label="Pagination">
<ul class="pagination pagination-dark pagination-ghost mb-0">
  <li class="page-item"><a class="page-link" href="#" aria-label="Previous page">‹</a></li>
  <li class="page-item"><a class="page-link" href="#">1</a></li>
  <li class="page-item"><a class="page-link" href="#">2</a></li>
  <li class="page-item"><a class="page-link active" href="#" aria-current="page">3</a></li>
  <li class="page-item"><a class="page-link" href="#">4</a></li>
  <li class="page-item"><a class="page-link" href="#">5</a></li>
  <li class="page-item disabled page-gap"><span class="page-link">…</span></li>
  <li class="page-item"><a class="page-link" href="#">24</a></li>
  <li class="page-item"><a class="page-link" href="#" aria-label="Next page">›</a></li>
</ul>
</nav></div>
CSS
.pagination-dark{
  --bs-pagination-padding-x:11px;--bs-pagination-padding-y:0;--bs-pagination-font-size:.88rem;
  --bs-pagination-color:#a8b0c0;--bs-pagination-bg:#161b23;
  --bs-pagination-border-width:1px;--bs-pagination-border-color:#232a36;--bs-pagination-border-radius:9px;
  --bs-pagination-hover-color:#e6e9ef;--bs-pagination-hover-bg:#1d2530;--bs-pagination-hover-border-color:#232a36;
  --bs-pagination-focus-color:#a8b0c0;--bs-pagination-focus-bg:#161b23;--bs-pagination-focus-box-shadow:none;
  --bs-pagination-active-color:#fff;--bs-pagination-active-bg:#1d4ed8;--bs-pagination-active-border-color:#3b82f6;
  --bs-pagination-disabled-color:#768196;--bs-pagination-disabled-bg:transparent;--bs-pagination-disabled-border-color:transparent;
  flex-wrap:wrap;align-items:center;gap:6px}
.pagination-dark .page-item .page-link{display:grid;place-items:center;min-width:38px;height:38px;font-weight:600;
  margin-left:0;border-radius:var(--bs-pagination-border-radius)}
.pagination-dark .page-link:focus-visible{outline:2px solid #60a5fa;outline-offset:2px}
.pagination-dark .page-gap .page-link{min-width:26px;padding:0}
.pagination-glow .page-link.active{box-shadow:0 0 14px rgba(59,130,246,.45)}
.pagination-ghost{--bs-pagination-bg:transparent;--bs-pagination-focus-bg:transparent;--bs-pagination-border-color:transparent;
  --bs-pagination-hover-bg:#1d2530;--bs-pagination-hover-border-color:#3b465a;
  --bs-pagination-active-bg:transparent;--bs-pagination-active-color:#22d3ee;--bs-pagination-active-border-color:#22d3ee}

Tailwind 4 code

Requires: Tailwind CSS 4

HTML
<div><span class="mb-4 block text-[.72rem] uppercase tracking-[.12em] text-[#768196]">Bordered</span>
<nav aria-label="Pagination">
<div class="inline-flex flex-wrap items-center gap-1.5">
  <a href="#" aria-label="Previous page" class="grid h-[38px] min-w-[38px] place-items-center text-[.88rem] font-semibold rounded-[9px] border px-[11px] focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-[#60a5fa] border-[#232a36] bg-[#161b23] text-[#a8b0c0] hover:bg-[#1d2530] hover:text-[#e6e9ef] transition-[color,background-color,border-color] motion-reduce:transition-none">‹</a>
  <a href="#" class="grid h-[38px] min-w-[38px] place-items-center text-[.88rem] font-semibold rounded-[9px] border px-[11px] focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-[#60a5fa] border-[#232a36] bg-[#161b23] text-[#a8b0c0] hover:bg-[#1d2530] hover:text-[#e6e9ef] transition-[color,background-color,border-color] motion-reduce:transition-none">1</a>
  <a href="#" class="grid h-[38px] min-w-[38px] place-items-center text-[.88rem] font-semibold rounded-[9px] border px-[11px] focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-[#60a5fa] border-[#232a36] bg-[#161b23] text-[#a8b0c0] hover:bg-[#1d2530] hover:text-[#e6e9ef] transition-[color,background-color,border-color] motion-reduce:transition-none">2</a>
  <a href="#" aria-current="page" class="grid h-[38px] min-w-[38px] place-items-center text-[.88rem] font-semibold rounded-[9px] border px-[11px] focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-[#60a5fa] border-[#3b82f6] bg-[#1d4ed8] text-white">3</a>
  <a href="#" class="grid h-[38px] min-w-[38px] place-items-center text-[.88rem] font-semibold rounded-[9px] border px-[11px] focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-[#60a5fa] border-[#232a36] bg-[#161b23] text-[#a8b0c0] hover:bg-[#1d2530] hover:text-[#e6e9ef] transition-[color,background-color,border-color] motion-reduce:transition-none">4</a>
  <a href="#" class="grid h-[38px] min-w-[38px] place-items-center text-[.88rem] font-semibold rounded-[9px] border px-[11px] focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-[#60a5fa] border-[#232a36] bg-[#161b23] text-[#a8b0c0] hover:bg-[#1d2530] hover:text-[#e6e9ef] transition-[color,background-color,border-color] motion-reduce:transition-none">5</a>
  <span class="grid h-[38px] min-w-[26px] place-items-center font-semibold text-[#768196]">…</span>
  <a href="#" class="grid h-[38px] min-w-[38px] place-items-center text-[.88rem] font-semibold rounded-[9px] border px-[11px] focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-[#60a5fa] border-[#232a36] bg-[#161b23] text-[#a8b0c0] hover:bg-[#1d2530] hover:text-[#e6e9ef] transition-[color,background-color,border-color] motion-reduce:transition-none">24</a>
  <a href="#" aria-label="Next page" class="grid h-[38px] min-w-[38px] place-items-center text-[.88rem] font-semibold rounded-[9px] border px-[11px] focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-[#60a5fa] border-[#232a36] bg-[#161b23] text-[#a8b0c0] hover:bg-[#1d2530] hover:text-[#e6e9ef] transition-[color,background-color,border-color] motion-reduce:transition-none">›</a>
</div>
</nav></div>

<div><span class="mb-4 block text-[.72rem] uppercase tracking-[.12em] text-[#768196]">Accent glow</span>
<nav aria-label="Pagination">
<div class="inline-flex flex-wrap items-center gap-1.5">
  <a href="#" aria-label="Previous page" class="grid h-[38px] min-w-[38px] place-items-center text-[.88rem] font-semibold rounded-[9px] border px-[11px] focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-[#60a5fa] border-[#232a36] bg-[#161b23] text-[#a8b0c0] hover:bg-[#1d2530] hover:text-[#e6e9ef] transition-[color,background-color,border-color] motion-reduce:transition-none">‹</a>
  <a href="#" class="grid h-[38px] min-w-[38px] place-items-center text-[.88rem] font-semibold rounded-[9px] border px-[11px] focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-[#60a5fa] border-[#232a36] bg-[#161b23] text-[#a8b0c0] hover:bg-[#1d2530] hover:text-[#e6e9ef] transition-[color,background-color,border-color] motion-reduce:transition-none">1</a>
  <a href="#" class="grid h-[38px] min-w-[38px] place-items-center text-[.88rem] font-semibold rounded-[9px] border px-[11px] focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-[#60a5fa] border-[#232a36] bg-[#161b23] text-[#a8b0c0] hover:bg-[#1d2530] hover:text-[#e6e9ef] transition-[color,background-color,border-color] motion-reduce:transition-none">2</a>
  <a href="#" aria-current="page" class="grid h-[38px] min-w-[38px] place-items-center text-[.88rem] font-semibold rounded-[9px] border px-[11px] focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-[#60a5fa] border-[#3b82f6] bg-[#1d4ed8] text-white shadow-[0_0_14px_rgba(59,130,246,.45)]">3</a>
  <a href="#" class="grid h-[38px] min-w-[38px] place-items-center text-[.88rem] font-semibold rounded-[9px] border px-[11px] focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-[#60a5fa] border-[#232a36] bg-[#161b23] text-[#a8b0c0] hover:bg-[#1d2530] hover:text-[#e6e9ef] transition-[color,background-color,border-color] motion-reduce:transition-none">4</a>
  <a href="#" class="grid h-[38px] min-w-[38px] place-items-center text-[.88rem] font-semibold rounded-[9px] border px-[11px] focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-[#60a5fa] border-[#232a36] bg-[#161b23] text-[#a8b0c0] hover:bg-[#1d2530] hover:text-[#e6e9ef] transition-[color,background-color,border-color] motion-reduce:transition-none">5</a>
  <span class="grid h-[38px] min-w-[26px] place-items-center font-semibold text-[#768196]">…</span>
  <a href="#" class="grid h-[38px] min-w-[38px] place-items-center text-[.88rem] font-semibold rounded-[9px] border px-[11px] focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-[#60a5fa] border-[#232a36] bg-[#161b23] text-[#a8b0c0] hover:bg-[#1d2530] hover:text-[#e6e9ef] transition-[color,background-color,border-color] motion-reduce:transition-none">24</a>
  <a href="#" aria-label="Next page" class="grid h-[38px] min-w-[38px] place-items-center text-[.88rem] font-semibold rounded-[9px] border px-[11px] focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-[#60a5fa] border-[#232a36] bg-[#161b23] text-[#a8b0c0] hover:bg-[#1d2530] hover:text-[#e6e9ef] transition-[color,background-color,border-color] motion-reduce:transition-none">›</a>
</div>
</nav></div>

<div><span class="mb-4 block text-[.72rem] uppercase tracking-[.12em] text-[#768196]">Ghost</span>
<nav aria-label="Pagination">
<div class="inline-flex flex-wrap items-center gap-1.5">
  <a href="#" aria-label="Previous page" class="grid h-[38px] min-w-[38px] place-items-center text-[.88rem] font-semibold rounded-[9px] border px-[11px] focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-[#60a5fa] border-transparent text-[#a8b0c0] hover:border-[#3b465a] hover:bg-[#1d2530] hover:text-[#e6e9ef] transition-[color,background-color,border-color] motion-reduce:transition-none">‹</a>
  <a href="#" class="grid h-[38px] min-w-[38px] place-items-center text-[.88rem] font-semibold rounded-[9px] border px-[11px] focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-[#60a5fa] border-transparent text-[#a8b0c0] hover:border-[#3b465a] hover:bg-[#1d2530] hover:text-[#e6e9ef] transition-[color,background-color,border-color] motion-reduce:transition-none">1</a>
  <a href="#" class="grid h-[38px] min-w-[38px] place-items-center text-[.88rem] font-semibold rounded-[9px] border px-[11px] focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-[#60a5fa] border-transparent text-[#a8b0c0] hover:border-[#3b465a] hover:bg-[#1d2530] hover:text-[#e6e9ef] transition-[color,background-color,border-color] motion-reduce:transition-none">2</a>
  <a href="#" aria-current="page" class="grid h-[38px] min-w-[38px] place-items-center text-[.88rem] font-semibold rounded-[9px] border px-[11px] focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-[#60a5fa] border-[#22d3ee] text-[#22d3ee]">3</a>
  <a href="#" class="grid h-[38px] min-w-[38px] place-items-center text-[.88rem] font-semibold rounded-[9px] border px-[11px] focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-[#60a5fa] border-transparent text-[#a8b0c0] hover:border-[#3b465a] hover:bg-[#1d2530] hover:text-[#e6e9ef] transition-[color,background-color,border-color] motion-reduce:transition-none">4</a>
  <a href="#" class="grid h-[38px] min-w-[38px] place-items-center text-[.88rem] font-semibold rounded-[9px] border px-[11px] focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-[#60a5fa] border-transparent text-[#a8b0c0] hover:border-[#3b465a] hover:bg-[#1d2530] hover:text-[#e6e9ef] transition-[color,background-color,border-color] motion-reduce:transition-none">5</a>
  <span class="grid h-[38px] min-w-[26px] place-items-center font-semibold text-[#768196]">…</span>
  <a href="#" class="grid h-[38px] min-w-[38px] place-items-center text-[.88rem] font-semibold rounded-[9px] border px-[11px] focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-[#60a5fa] border-transparent text-[#a8b0c0] hover:border-[#3b465a] hover:bg-[#1d2530] hover:text-[#e6e9ef] transition-[color,background-color,border-color] motion-reduce:transition-none">24</a>
  <a href="#" aria-label="Next page" class="grid h-[38px] min-w-[38px] place-items-center text-[.88rem] font-semibold rounded-[9px] border px-[11px] focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-[#60a5fa] border-transparent text-[#a8b0c0] hover:border-[#3b465a] hover:bg-[#1d2530] hover:text-[#e6e9ef] transition-[color,background-color,border-color] motion-reduce:transition-none">›</a>
</div>
</nav></div>
CSS
@theme {
  --color-brand: #2563eb;
}

About this set

Numbered pagination built for dark interfaces such as dashboards, developer tools and media sites. Bordered gives every page a dark tile with a slightly lighter border and a deep blue current page. Accent glow keeps the same tiles and adds a soft blue glow around the current page so it stands out on very dark backgrounds. Ghost removes the tiles altogether, shows a border only on hover and marks the current page with a cyan outline and cyan number, the lightest option when the page is already visually busy. The greys were chosen for contrast on a near-black #0b0f16 background: page numbers, the ellipsis and the demo captions all reach 4.5:1, and the focus outline switches to a lighter blue that stays visible on dark surfaces. Every row is a set of links inside a nav labelled Pagination and wraps on narrow screens. The Bootstrap version sets data-bs-theme=”dark” and restyles the native .pagination component through its –bs-pagination variables; the Tailwind version uses utility classes with arbitrary colour values.

What’s included

  • Bordered, accent glow and ghost variants
  • Colours checked for 4.5:1 contrast on a near-black background
  • Light-blue focus outline that shows on dark surfaces
  • Ghost variant shows a border only on hover
  • Bootstrap version uses data-bs-theme="dark" and .pagination

Accessibility

Each row is a nav labelled Pagination; the active page has aria-current="page" and the arrows are named Previous page and Next page. Keyboard focus shows a 2px #60a5fa outline with an offset, visible against both the tiles and the background. Numbers, the ellipsis and captions meet 4.5:1 contrast, and hover transitions stop under prefers-reduced-motion.

Customise it

In plain CSS change the #161b23 tile, #232a36 border and #1d4ed8 current colours on .pg a, or #22d3ee on .ghost. In Bootstrap edit --bs-pagination-bg, --bs-pagination-border-color and --bs-pagination-active-bg on .pagination-dark. In Tailwind replace the bg-[#161b23], border-[#232a36] and bg-[#1d4ed8] values.