Vous cherchez à améliorer votre design pagination et rendre votre navigation plus agréable ? Dans ce tutoriel frontend, vous allez découvrir 4 exemples concrets de css pagination, modernes et efficaces, avec du code prêt à l’emploi pour booster à la fois votre UX et votre SEO.
- Structurer une pagination propre, accessible et efficace pour améliorer la navigation et le référencement
- Découvrir 4 styles visuels modernes pour adapter facilement l’apparence de votre pagination à votre site
- Savoir créer une expérience utilisateur fluide et agréable, notamment sur mobile, sans complexifier votre code
Vous avez déjà remarqué à quel point une pagination peut changer l’impression d’un site ? C’est souvent un détail… mais un détail qui fait toute la différence. Une pagination bien pensée améliore la navigation, rassure vos visiteurs et renforce votre SEO.
Dans ce tutoriel, vous allez découvrir 4 exemples complets de design pagination en CSS, à partir d’une base HTML commune. L’objectif est simple : vous montrer comment transformer un même code en expériences visuelles totalement différentes. Et rassurez-vous, même si vous débutez, tout sera expliqué pas à pas.
Pourquoi travailler le design pagination ?
Avant de plonger dans le code, prenons une minute pour comprendre l’intérêt.
Une pagination sert à :
- organiser le contenu (articles, produits…)
- faciliter la navigation
- aider Google à explorer votre site
Mais au-delà de ça, un bon design pagination améliore :
- l’expérience utilisateur (UX)
- le temps passé sur votre site
- le taux de clic
En clair :
- Une pagination soignée = des utilisateurs qui explorent.

👉 Pour en savoir plus : Coder une pagination dynamique en PHP et MySQL.
La base commune :Le HTML de la pagination
Tous nos exemples reposent sur exactement le même HTML. C’est très important.
Voici sa structure :
<nav class="pagination" aria-label="Pagination des articles">
<ul class="pagination__list">
<li class="pagination__item">
<a class="pagination__link pagination__link--first" href="/blog/page/1/" rel="first" aria-label="Aller à la première page">
Première
</a>
</li>
<li class="pagination__item">
<a class="pagination__link pagination__link--prev" href="/blog/page/2/" rel="prev" aria-label="Aller à la page précédente">
Précédente
</a>
</li>
<li class="pagination__item">
<a class="pagination__link" href="/blog/page/1/" aria-label="Aller à la page 1">
1
</a>
</li>
<li class="pagination__item">
<a class="pagination__link" href="/blog/page/2/" aria-label="Aller à la page 2">
2
</a>
</li>
<li class="pagination__item">
<span class="pagination__link pagination__link--current" aria-current="page" aria-label="Page actuelle, page 3">
3
</span>
</li>
<li class="pagination__item">
<a class="pagination__link" href="/blog/page/4/" aria-label="Aller à la page 4">
4
</a>
</li>
<li class="pagination__item">
<a class="pagination__link" href="/blog/page/5/" aria-label="Aller à la page 5">
5
</a>
</li>
<li class="pagination__item" aria-hidden="true">
<span class="pagination__dots">…</span>
</li>
<li class="pagination__item">
<a class="pagination__link" href="/blog/page/12/" aria-label="Aller à la page 12">
12
</a>
</li>
<li class="pagination__item">
<a class="pagination__link pagination__link--next" href="/blog/page/4/" rel="next" aria-label="Aller à la page suivante">
Suivante
</a>
</li>
<li class="pagination__item">
<a class="pagination__link pagination__link--last" href="/blog/page/12/" rel="last" aria-label="Aller à la dernière page">
Dernière
</a>
</li>
</ul>
</nav>
Ce code servira à l’ensemble des exemples ci-dessous.
Décryptage simple :
<nav>: indique à Google que c’est une navigation<ul>: liste des pages<li>: une page<a>: lien cliquable<span>: page actuelle (non cliquable)
Pourquoi c’est bon pour le SEO ?
Parce que :
- vous utilisez des liens réels (
<a href="">) - vous indiquez la page actuelle avec
aria-current - vous ajoutez
rel="prev"etrel="next"
Google comprend parfaitement votre pagination.
👉 Pour aller plus loin : L’attribut rel pour un lien <a>
Exemple 1 : Pagination moderne et simple
L’idée est d’obtenir un design propre, moderne, efficace. C’est le style que vous pouvez utiliser sur 80% des sites.
Les points clés
1. Variables CSS
:root {
--pagi-accent: #6366f1;
}
Les variables CSS permettent de changer toute la couleur du design en une ligne.
2. L’effet hover
.pagination__link:hover {
transform: translateY(-1px);
}
C’est une petite animation qui provoque une sensation de qualité.
3. La page active
.pagination__link--current {
background-color: var(--pagi-accent);
}
On guide l’utilisateur visuellement.
- simplicité = efficacité
- cohérence des couleurs
- feedback visuel au survol
Le résultat
Le CSS complet
/* --- Variables de design --- */
:root {
--pagi-bg: #ffffff;
--pagi-accent: #6366f1; /* Indigo moderne */
--pagi-accent-light: #eef2ff;
--pagi-text: #4b5563;
--pagi-text-muted: #9ca3af;
--pagi-border: #e5e7eb;
--pagi-radius: 8px;
--pagi-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06);
--pagi-transition: all 0.2s cubic-bezier(0.4, 0, 0.2, 1);
}
/* --- Structure de la navigation --- */
.pagination {
display: flex;
justify-content: center;
margin: 2rem 0;
font-family: 'Inter', system-ui, -apple-system, sans-serif;
}
.pagination__list {
display: flex;
align-items: center;
gap: 6px; /* Espacement entre les éléments */
padding: 0;
margin: 0;
list-style: none;
}
/* --- Style de base des liens --- */
.pagination__link {
display: flex;
align-items: center;
justify-content: center;
min-width: 40px;
height: 40px;
padding: 0 12px;
border-radius: var(--pagi-radius);
border: 1px solid var(--pagi-border);
background-color: var(--pagi-bg);
color: var(--pagi-text);
text-decoration: none;
font-size: 0.95rem;
font-weight: 500;
transition: var(--pagi-transition);
cursor: pointer;
user-select: none;
}
/* --- État Hover (Survol) --- */
.pagination__link:hover:not(.pagination__link--current) {
border-color: var(--pagi-accent);
color: var(--pagi-accent);
background-color: var(--pagi-accent-light);
transform: translateY(-1px);
}
/* --- Page Actuelle --- */
.pagination__link--current {
background-color: var(--pagi-accent);
border-color: var(--pagi-accent);
color: #ffffff;
box-shadow: 0 4px 10px rgba(99, 102, 241, 0.3);
cursor: default;
}
/* --- Style des points de suspension (...) --- */
.pagination__dots {
display: flex;
align-items: center;
justify-content: center;
width: 32px;
color: var(--pagi-text-muted);
font-weight: bold;
}
/* --- Boutons Précédent/Suivant/Premier/Dernier --- */
.pagination__link--prev,
.pagination__link--next,
.pagination__link--first,
.pagination__link--last {
font-size: 0.85rem;
text-transform: uppercase;
letter-spacing: 0.025em;
font-weight: 600;
border: 1px solid var(--pagi-border);
background: #f9fafb;
}
/* --- Responsive Design --- */
@media (max-width: 768px) {
.pagination__list {
gap: 4px;
}
/* On cache le texte "Première/Dernière" sur mobile pour gagner de la place */
.pagination__link--first,
.pagination__link--last {
display: none;
}
/* On réduit la taille des cases sur petit écran */
.pagination__link {
min-width: 36px;
height: 36px;
padding: 0 8px;
font-size: 0.85rem;
}
/* Optionnel : masquer certains numéros de page si la liste est trop longue */
/* Ici on garde tout mais on réduit les marges */
}
/* --- Accessibilité Focus --- */
.pagination__link:focus-visible {
outline: 3px solid var(--pagi-accent-light);
outline-offset: 1px;
}
Exemple 2 : Pagination avec micro-interactions
On garde un design moderne, mais on ajoute de la vie. Avec un petit effet discret.
Des formations informatique pour tous !
Débutant ou curieux ? Apprenez le développement web, le référencement, le webmarketing, la bureautique, à maîtriser vos appareils Apple et bien plus encore…
Formateur indépendant, professionnel du web depuis 2006, je vous accompagne pas à pas et en cours particulier, que vous soyez débutant ou que vous souhaitiez progresser. En visio, à votre rythme, et toujours avec pédagogie.
Découvrez mes formations Qui suis-je ?Animation au clic
.pagination__link:active {
transform: scale(0.95);
}
Quand l’utilisateur clique, le bouton “réagit”.
Effet ripple
.pagination__link::after {
background: rgba(0, 0, 0, 0.05);
}
Petit effet visuel qui donne un côté premium.
Scroll horizontal sur mobile
.pagination {
overflow-x: auto;
}
Sur mobile, la pagination devient scrollable. Cela évite les paginations cassées sur petit écran.
- les micro-interactions améliorent l’UX
- le mobile doit être pensé dès le départ
- une bonne pagination doit être fluide
Le résultat
Le code CSS complet de la pagination
/* =========================
PAGINATION MODERNE UX
Micro-interactions + Scroll mobile
========================= */
/* RESET LÉGER */
.pagination {
display: flex;
justify-content: center;
margin: 2rem 0;
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif;
}
/* LISTE */
.pagination__list {
display: flex;
align-items: center;
gap: 0.4rem;
padding: 0.4rem;
margin: 0;
list-style: none;
flex-wrap: wrap;
border-radius: 14px;
background: rgba(0, 0, 0, 0.02);
backdrop-filter: blur(6px);
}
/* ITEMS */
.pagination__item {
display: flex;
}
/* LIENS */
.pagination__link {
position: relative;
display: flex;
align-items: center;
justify-content: center;
min-width: 42px;
height: 42px;
padding: 0 0.75rem;
font-size: 0.95rem;
font-weight: 500;
color: #1a1a1a;
text-decoration: none;
border-radius: 10px;
background: #ffffff;
border: 1px solid #e5e7eb;
overflow: hidden;
/* micro-interactions */
transition:
transform 0.2s ease,
background 0.25s ease,
border-color 0.25s ease,
box-shadow 0.25s ease,
color 0.2s ease;
}
/* EFFET HOVER (léger lift + ombre) */
.pagination__link:hover {
background: #f9fafb;
border-color: #d1d5db;
transform: translateY(-2px) scale(1.02);
box-shadow: 0 6px 14px rgba(0, 0, 0, 0.08);
}
/* EFFET CLICK */
.pagination__link:active {
transform: scale(0.95);
box-shadow: 0 2px 6px rgba(0, 0, 0, 0.06);
}
/* ANIMATION RIPPLE (micro interaction premium) */
.pagination__link::after {
content: "";
position: absolute;
inset: 0;
background: rgba(0, 0, 0, 0.05);
opacity: 0;
transform: scale(0.8);
transition: opacity 0.3s ease, transform 0.3s ease;
border-radius: inherit;
}
.pagination__link:active::after {
opacity: 1;
transform: scale(1);
transition: 0s;
}
/* ACTIVE / CURRENT */
.pagination__link--current {
background: #111827;
color: #ffffff;
border-color: #111827;
cursor: default;
box-shadow: 0 6px 16px rgba(17, 24, 39, 0.25);
}
/* HOVER désactivé sur current */
.pagination__link--current:hover {
transform: none;
}
/* PREV / NEXT / FIRST / LAST */
.pagination__link--prev,
.pagination__link--next,
.pagination__link--first,
.pagination__link--last {
padding: 0 1rem;
font-weight: 600;
}
/* POINTS ... */
.pagination__dots {
display: flex;
align-items: center;
justify-content: center;
min-width: 42px;
height: 42px;
color: #9ca3af;
font-size: 1.2rem;
}
/* FOCUS ACCESSIBILITÉ */
.pagination__link:focus-visible {
outline: none;
box-shadow: 0 0 0 3px rgba(17, 24, 39, 0.2);
}
/* =========================
SCROLL HORIZONTAL MOBILE (ULTRA UX)
========================= */
@media (max-width: 768px) {
.pagination {
justify-content: flex-start;
overflow-x: auto;
padding-bottom: 0.5rem;
/* scroll fluide iOS */
-webkit-overflow-scrolling: touch;
}
.pagination__list {
flex-wrap: nowrap;
overflow-x: auto;
scrollbar-width: none; /* Firefox */
}
.pagination__list::-webkit-scrollbar {
display: none; /* Chrome/Safari */
}
.pagination__link {
flex: 0 0 auto;
min-width: 38px;
height: 38px;
font-size: 0.85rem;
}
/* effet "fade" sur les côtés (UX premium) */
.pagination {
mask-image: linear-gradient(
to right,
transparent,
black 20px,
black calc(100% - 20px),
transparent
);
}
/* cache first/last pour simplifier */
.pagination__link--first,
.pagination__link--last {
display: none;
}
}
/* =========================
TRÈS PETITS ÉCRANS
========================= */
@media (max-width: 400px) {
.pagination__link {
min-width: 32px;
height: 32px;
font-size: 0.8rem;
}
/* réduction visuelle du nombre de pages */
.pagination__item:nth-child(n+6):nth-child(-n+8) {
display: none;
}
}
Exemple 3 : Pagination futuriste (glassmorphism)
Voici un design plus créatif, inspiré des interfaces modernes.
Effet verre (glass)
background: rgba(255, 255, 255, 0.6);
backdrop-filter: blur(14px);
Donne un effet “flou derrière”.
Halo lumineux
.pagination__link::before {
background: linear-gradient(...);
}
Un effet lumineux au hover.
Animation d’apparition
@keyframes fadeSlide {
opacity: 0;
transform: translateY(10px);
}
Les éléments apparaissent progressivement.
Dark mode automatique
@media (prefers-color-scheme: dark)
Le design s’adapte au système de l’utilisateur.
👉 En savoir plus sur le Darkmode CSS : Codez un mode sombre complet sans JavaScript
Ce que vous devez retenir
- design moderne = émotions
- animations = immersion
- attention à ne pas en faire trop
Le résultat
Le code CSS complet
/* =========================
PAGINATION FUTURISTE / GLASS UX
========================= */
/* CONTAINER */
.pagination {
display: flex;
justify-content: center;
margin: 3rem 0;
font-family: "Inter", -apple-system, sans-serif;
}
/* LISTE */
.pagination__list {
display: flex;
align-items: center;
gap: 0.5rem;
padding: 0.6rem;
margin: 0;
list-style: none;
/* effet glass */
background: rgba(255, 255, 255, 0.6);
backdrop-filter: blur(14px);
border-radius: 999px;
border: 1px solid rgba(255, 255, 255, 0.4);
/* ombre moderne */
box-shadow:
0 10px 30px rgba(0, 0, 0, 0.08),
inset 0 1px 0 rgba(255, 255, 255, 0.6);
}
/* ITEMS */
.pagination__item {
position: relative;
}
/* LIENS */
.pagination__link {
position: relative;
display: grid;
place-items: center;
min-width: 44px;
height: 44px;
padding: 0 0.8rem;
font-size: 0.95rem;
font-weight: 500;
color: #1f2937;
text-decoration: none;
border-radius: 999px;
background: transparent;
border: none;
/* transitions avancées */
transition:
transform 0.25s cubic-bezier(.2,.8,.2,1),
color 0.25s ease,
background 0.3s ease,
box-shadow 0.3s ease;
}
/* HALO ANIMÉ */
.pagination__link::before {
content: "";
position: absolute;
inset: 0;
border-radius: inherit;
background: linear-gradient(135deg, #6366f1, #8b5cf6);
opacity: 0;
transform: scale(0.8);
transition: all 0.3s ease;
z-index: -1;
}
/* HOVER */
.pagination__link:hover {
color: white;
transform: translateY(-3px) scale(1.05);
}
.pagination__link:hover::before {
opacity: 1;
transform: scale(1);
box-shadow:
0 8px 20px rgba(99, 102, 241, 0.4),
0 0 0 2px rgba(255,255,255,0.3) inset;
}
/* ACTIVE CLICK */
.pagination__link:active {
transform: scale(0.92);
}
/* CURRENT */
.pagination__link--current {
color: white;
font-weight: 600;
}
.pagination__link--current::before {
opacity: 1;
transform: scale(1);
background: linear-gradient(135deg, #111827, #374151);
box-shadow:
0 10px 25px rgba(0,0,0,0.25),
inset 0 1px 2px rgba(255,255,255,0.2);
}
/* PREV / NEXT */
.pagination__link--prev,
.pagination__link--next {
font-size: 0.85rem;
padding: 0 1rem;
opacity: 0.8;
}
.pagination__link--prev:hover,
.pagination__link--next:hover {
opacity: 1;
}
/* DOTS */
.pagination__dots {
display: grid;
place-items: center;
width: 44px;
height: 44px;
font-size: 1.2rem;
color: #9ca3af;
}
/* FOCUS ACCESSIBILITÉ */
.pagination__link:focus-visible {
outline: none;
box-shadow:
0 0 0 3px rgba(99,102,241,0.4);
}
/* =========================
SCROLL MOBILE IMMERSIF
========================= */
@media (max-width: 768px) {
.pagination {
justify-content: flex-start;
overflow-x: auto;
padding-bottom: 0.5rem;
-webkit-overflow-scrolling: touch;
}
.pagination__list {
flex-wrap: nowrap;
overflow-x: auto;
scrollbar-width: none;
}
.pagination__list::-webkit-scrollbar {
display: none;
}
.pagination__link {
flex: 0 0 auto;
min-width: 40px;
height: 40px;
font-size: 0.85rem;
}
/* effet fade latéral */
.pagination {
mask-image: linear-gradient(
to right,
transparent,
black 25px,
black calc(100% - 25px),
transparent
);
}
.pagination__link--first,
.pagination__link--last {
display: none;
}
}
/* =========================
MICRO-DETAIL PREMIUM
========================= */
/* petit effet flottant global */
.pagination__item {
transition: transform 0.2s ease;
}
.pagination__item:hover {
transform: translateY(-2px);
}
/* animation douce d’apparition */
@keyframes fadeSlide {
from {
opacity: 0;
transform: translateY(10px);
}
to {
opacity: 1;
transform: translateY(0);
}
}
.pagination__item {
animation: fadeSlide 0.4s ease both;
}
.pagination__item:nth-child(1) { animation-delay: 0.05s; }
.pagination__item:nth-child(2) { animation-delay: 0.1s; }
.pagination__item:nth-child(3) { animation-delay: 0.15s; }
.pagination__item:nth-child(4) { animation-delay: 0.2s; }
.pagination__item:nth-child(5) { animation-delay: 0.25s; }
.pagination__item:nth-child(6) { animation-delay: 0.3s; }
/* =========================
DARK MODE AUTO
========================= */
@media (prefers-color-scheme: dark) {
.pagination__list {
background: rgba(30, 30, 30, 0.6);
border: 1px solid rgba(255,255,255,0.1);
}
.pagination__link {
color: #e5e7eb;
}
.pagination__dots {
color: #6b7280;
}
.pagination__link--current::before {
background: linear-gradient(135deg, #4f46e5, #7c3aed);
}
}
Exemple 4 : Pagination style éditorial
Un style sobre, élégant, inspiré de la presse en ligne.
Typographie
font-family: Georgia, "Times New Roman", serif;
Immédiatement plus sérieux.
👉 Pour aller plus loin : Bien choisir sa police de caractères.
Soulignement subtil
.pagination__link::after {
width: 0%;
}
L’animation reste discrète.
Page active marquée
.pagination__link--current {
font-weight: 700;
}
Pas besoin de couleurs flashy.
- moins d’effets = plus de crédibilité
- parfait pour un blog ou un site éditorial
- design intemporel
Le résultat
Le code CSS complet de la pagination
/* =========================
PAGINATION STYLE ÉDITORIAL
========================= */
.pagination {
display: flex;
justify-content: center;
margin: 3rem 0;
font-family: Georgia, "Times New Roman", serif;
}
/* CONTENEUR */
.pagination__list {
display: flex;
align-items: center;
gap: 0.2rem;
padding: 0.5rem 1rem;
margin: 0;
list-style: none;
border-top: 1px solid #d6d6d6;
border-bottom: 1px solid #d6d6d6;
}
/* ITEMS */
.pagination__item {
display: flex;
}
/* LIENS */
.pagination__link {
position: relative;
display: inline-block;
padding: 0.5rem 0.75rem;
font-size: 0.95rem;
font-weight: 400;
color: #111;
text-decoration: none;
transition: color 0.2s ease;
}
/* SOULIGNEMENT ÉDITORIAL */
.pagination__link::after {
content: "";
position: absolute;
left: 50%;
bottom: 0;
width: 0%;
height: 1px;
background: #111;
transition: all 0.25s ease;
transform: translateX(-50%);
}
.pagination__link:hover {
color: #000;
}
.pagination__link:hover::after {
width: 70%;
}
/* PAGE ACTIVE */
.pagination__link--current {
font-weight: 700;
cursor: default;
}
.pagination__link--current::after {
width: 100%;
height: 2px;
}
/* PREV / NEXT */
.pagination__link--prev,
.pagination__link--next,
.pagination__link--first,
.pagination__link--last {
font-size: 0.85rem;
letter-spacing: 0.03em;
text-transform: uppercase;
color: #555;
}
.pagination__link--prev:hover,
.pagination__link--next:hover {
color: #000;
}
/* POINTS */
.pagination__dots {
padding: 0.5rem 0.5rem;
color: #999;
}
/* FOCUS ACCESSIBILITÉ */
.pagination__link:focus-visible {
outline: none;
border-bottom: 2px solid #111;
}
/* =========================
RESPONSIVE MOBILE
========================= */
@media (max-width: 768px) {
.pagination {
justify-content: flex-start;
overflow-x: auto;
padding-bottom: 0.5rem;
-webkit-overflow-scrolling: touch;
}
.pagination__list {
flex-wrap: nowrap;
overflow-x: auto;
scrollbar-width: none;
}
.pagination__list::-webkit-scrollbar {
display: none;
}
.pagination__link {
flex: 0 0 auto;
padding: 0.5rem 0.6rem;
font-size: 0.9rem;
}
/* Simplification mobile */
.pagination__link--first,
.pagination__link--last {
display: none;
}
/* effet fondu latéral discret */
.pagination {
mask-image: linear-gradient(
to right,
transparent,
black 20px,
black calc(100% - 20px),
transparent
);
}
}
/* =========================
TRÈS PETITS ÉCRANS
========================= */
@media (max-width: 400px) {
.pagination__link {
font-size: 0.85rem;
padding: 0.4rem 0.5rem;
}
/* allègement visuel */
.pagination__item:nth-child(n+6):nth-child(-n+8) {
display: none;
}
}
Comment choisir votre design pagination ?
Bonne question… et la réponse est simple :
- Site pro / blog → style éditorial
- SaaS / startup → style moderne ou futuriste
- Site grand public → micro-interactions
- Le plus important reste la cohérence avec votre site.
Les erreurs à éviter
Même avec un bon css pagination, certaines erreurs reviennent souvent :
- Trop d’effets : Si ça bouge dans tous les sens… l’utilisateur fuit.
- Mauvaise lisibilité : Un bouton doit être clair immédiatement.
- Pagination non responsive : Si elle casse sur mobile → catastrophe UX.
Optimiser SEO votre pagination
Une pagination bien faite aide votre référencement.
À toujours vérifier :
- liens cliquables (pas du JavaScript uniquement)
- balises
rel="prev"etrel="next" - structure propre
- URLs logiques
Google adore ça.
Vous venez de voir une chose essentielle : le HTML ne change pas, mais le design transforme tout.
Avec les 4 styles que vous avez découverts, vous avez maintenant une base solide pour créer une pagination adaptée à votre projet. Que vous visiez un rendu moderne, futuriste ou éditorial, le plus important reste toujours le même : offrir une navigation fluide et agréable.
Et si vous devez retenir une seule chose, c’est celle-ci : une bonne pagination ne se voit presque pas… parce qu’elle fonctionne parfaitement.

Fondateur de l’agence Créa-troyes, affiliée France Num
Intervenant en Freelance.
Contactez-moi
