Créer un carrousel HTML/CSS moderne : guide pas à pas #
Un carrousel propre, c’est d’abord du HTML lisible et du CSS bien pensé — pas une montagne de JavaScript. Ce guide montre comment construire un slider responsive, accessible et fluide, avec du code que vous pouvez copier, comprendre et adapter à votre projet.
scroll-snap : chaque slide « aimante » au scroll, c’est nativement tactile et accessible, et le JavaScript ne sert qu’aux extras (auto-play, points de pagination). Pas besoin de librairie pour la base.Choisir le type de carrousel adapté à son projet #
Le type de carrousel conditionne toute la conception, sur le plan technique comme esthétique. Le format le plus courant reste le carrousel horizontal, idéal pour une succession d’images ou de contenus éditoriaux. Certains projets — catalogues produit, galeries créatives — exploitent mieux un défilement vertical sur les écrans hauts.
- Carrousel d’images : le cas classique, une slide = une image plein cadre, navigation au scroll ou aux flèches.
- Carrousel en grille / multi-slides : plusieurs cartes visibles à la fois, utile pour les portfolios et les listes de produits.
- Slider de témoignages : du texte court par slide, pour valoriser des retours sans encombrer la page.
Avant d’écrire la moindre ligne, posez le besoin réel : combien de slides, du texte ou des images, défilement manuel ou automatique. Un module trop chargé fatigue l’œil et nuit autant à l’expérience qu’au référencement. La sobriété est presque toujours le bon choix.
À lire Peut-on savoir qui consulte son profil Instagram ? La vraie réponse
Structurer un diaporama interactif en HTML #
La solidité d’un carrousel repose sur une structure HTML simple et sémantique. Un conteneur de piste (la track) englobe une liste de slides. Utiliser une liste (ul/li) ou des figure aide les lecteurs d’écran à annoncer « élément X sur N ».
<div class="carousel">
<ul class="carousel__track">
<li class="carousel__slide">
<img src="slide-1.webp" alt="Description de la première image" width="800" height="500">
</li>
<li class="carousel__slide">
<img src="slide-2.webp" alt="Description de la deuxième image" width="800" height="500">
</li>
<li class="carousel__slide">
<img src="slide-3.webp" alt="Description de la troisième image" width="800" height="500">
</li>
</ul>
<button class="carousel__btn carousel__btn--prev" aria-label="Slide précédente"></button>
<button class="carousel__btn carousel__btn--next" aria-label="Slide suivante"></button>
</div>
- Renseignez toujours un attribut
altdescriptif sur chaque image, et les dimensionswidth/heightpour éviter le décalage de mise en page (CLS). - Les boutons de navigation sont de vrais
<button>avec unaria-labelexplicite — jamais de simples<div>cliquables. - Gardez une hiérarchie de balises claire : un conteneur, une piste, des slides. C’est plus facile à styler et à scripter ensuite.
Personnaliser le design avec CSS pour un rendu unique #
Le CSS fait tout le travail de la base. La propriété scroll-snap-type sur la piste et scroll-snap-align sur chaque slide suffisent à obtenir un défilement « aimanté » fluide, sans une ligne de JavaScript. Les transitions reposent sur scroll-behavior et, pour les effets, sur transition et transform.
.carousel { position: relative; }
.carousel__track {
display: flex;
gap: 16px;
margin: 0;
padding: 0;
list-style: none;
overflow-x: auto;
scroll-snap-type: x mandatory; /* aimante chaque slide */
scroll-behavior: smooth; /* défilement fluide */
-webkit-overflow-scrolling: touch;
}
.carousel__slide {
flex: 0 0 100%; /* une slide pleine largeur */
scroll-snap-align: center;
}
.carousel__slide img {
width: 100%;
height: auto;
display: block;
border-radius: 12px;
}
/* Masquer la barre de scroll, garder l'accessibilité clavier */
.carousel__track { scrollbar-width: none; }
.carousel__track::-webkit-scrollbar { display: none; }
- Pour un carrousel multi-slides, remplacez
flex: 0 0 100%parflex: 0 0 280px(ou uncalc()) afin d’afficher plusieurs cartes. - Stylez les boutons avec des icônes SVG et un état
:hover/:focus-visiblenettement visible. - Centralisez vos couleurs dans des variables CSS (
--accent,--bg) pour adapter le module à votre charte sans dupliquer le code.
Intégrer l’interactivité avec JavaScript #
Avec scroll-snap, le JavaScript reste optionnel et léger : il sert à câbler les boutons « précédent / suivant », l’auto-play ou les points de pagination. La navigation s’appuie sur la méthode scrollBy(), qui respecte automatiquement le snap.
const carousel = document.querySelector('.carousel');
const track = carousel.querySelector('.carousel__track');
const slide = carousel.querySelector('.carousel__slide');
function scrollTo(direction) {
const amount = slide.getBoundingClientRect().width + 16; // largeur + gap
track.scrollBy({ left: direction * amount, behavior: 'smooth' });
}
carousel.querySelector('.carousel__btn--next')
.addEventListener('click', () => scrollTo(1));
carousel.querySelector('.carousel__btn--prev')
.addEventListener('click', () => scrollTo(-1));
Pour un défilement automatique, un simple setInterval appelant scrollTo(1) fait l’affaire — à condition de le mettre en pause au survol et au focus clavier (voir la section accessibilité). Si vous avez besoin de fonctionnalités avancées (loop infini, lazy loading natif, breakpoints fins), des librairies éprouvées comme Swiper, Glide.js ou Slick font gagner du temps — mais pour un carrousel simple, le code ci-dessus suffit.
À lire Pourquoi votre vidéo TikTok ne fait pas de vues : ce qui bloque vraiment
Optimiser le carrousel HTML pour le référencement naturel #
Un carrousel mal conçu peut peser sur les performances et la visibilité. Pour rester favorable au référencement naturel, privilégiez du HTML réellement présent dans la page (pas un contenu 100 % généré côté client), des images optimisées et un chargement maîtrisé.
- Servez vos images en WebP ou AVIF, avec des dimensions adaptées à l’affichage réel.
- Activez le
loading="lazy"sur les slides hors écran etfetchpriority="high"sur la première image visible. - Rédigez des attributs
altdescriptifs et conservez une structure de titres logique autour du module.
Évitez les carrousels dont tout le contenu n’existe qu’après exécution du JavaScript sans rendu côté serveur : certains moteurs risquent de ne pas le voir. La rapidité de chargement et la légèreté des dépendances servent à la fois l’utilisateur et le SEO.
Éviter les pièges courants et améliorer l’accessibilité #
Beaucoup de carrousels négligent l’accessibilité. Or un module exclut vite les utilisateurs au clavier ou les personnes sensibles aux animations. Quelques règles suffisent à corriger l’essentiel.
Les bonnes pratiques
- Navigation clavier complète (Tab, flèches, Entrée).
aria-labelsur chaque bouton,aria-live="polite"sur la zone qui change.- Mettre l’auto-play en pause au survol et au focus.
- Respecter
prefers-reduced-motion.
Les erreurs fréquentes
- Des
<div>cliquables au lieu de vrais boutons. - Un défilement auto trop rapide, impossible à arrêter.
- Des images sans
alt. - Un focus invisible au clavier.
Pour les personnes ayant activé la réduction des animations, désactivez le défilement fluide et coupez tout auto-play. C’est une ligne de CSS et un test côté JavaScript :
À lire Influenceuse : Top conseils devenir influenceur 2026
@media (prefers-reduced-motion: reduce) {
.carousel__track { scroll-behavior: auto; }
}
const reduceMotion =
window.matchMedia('(prefers-reduced-motion: reduce)').matches;
if (!reduceMotion) {
// démarrer l'auto-play seulement si l'utilisateur l'autorise
startAutoPlay();
}
Adapter son carrousel aux tendances actuelles du web design #
Les approches récentes misent sur la légèreté et le natif. scroll-snap remplace désormais une grande partie du JavaScript d’autrefois, et les variables CSS permettent d’adapter le module à un mode sombre ou à une charte sans réécrire le style.
- Effets de profondeur sobres (zoom léger au survol, ombres douces) via
transformettransition, sans animations clignotantes. - Pilotage des couleurs par
:root { --accent: … }et un sélecteurprefers-color-schemepour le mode sombre. - Carrousels plein écran avec image ou vidéo, à condition de garder le poids sous contrôle et un fallback statique.
La meilleure tendance reste la même depuis des années : un carrousel qui se charge vite, fonctionne au clavier et reste compréhensible. L’innovation visuelle n’a de valeur que si elle reste au service de l’utilisateur.
🎯 À retenir #
- La base d’un carrousel moderne tient en HTML + CSS : une piste
flexenoverflow-x:autoavecscroll-snap. - Le JavaScript reste optionnel et léger : il câble les boutons, l’auto-play et la pagination, rien de plus.
- Soignez l’accessibilité : vrais boutons,
aria-label, pause au focus,prefers-reduced-motion. - Pour le SEO : contenu présent dans le HTML, images WebP/AVIF,
loading="lazy"etaltdescriptifs. - Une librairie (Swiper, Glide, Slick) ne se justifie que pour des besoins avancés — pas pour un slider simple.
FAQ #
Comment faire un carrousel en HTML ?
ul.carousel__track) et une slide par li. Côté CSS, mettez la piste en display:flex; overflow-x:auto avec scroll-snap-type:x mandatory, et chaque slide en flex:0 0 100% avec scroll-snap-align. Vous obtenez un carrousel fonctionnel et tactile sans JavaScript.Comment créer un slide (défilement) en JavaScript ?
track.scrollBy({ left: largeurSlide, behavior: 'smooth' }) sur clic. Le navigateur respecte alors le scroll-snap automatiquement. Pour un auto-play, appelez cette fonction dans un setInterval que vous mettez en pause au survol et au focus.Un diaporama HTML peut-il fonctionner sans librairie ?
scroll-snap en CSS plus quelques lignes de JavaScript suffisent largement. Les librairies comme Swiper ou Glide.js ne deviennent utiles que pour des besoins pointus : loop infini, breakpoints multiples, effets 3D ou lazy loading avancé.Un carrousel est-il bon pour le SEO ?
lazy, alt) et si le module ne ralentit pas la page. Un carrousel lourd ou tout-JavaScript sans rendu serveur peut au contraire nuire à l’indexation et aux Core Web Vitals.Comment rendre un carrousel accessible ?
<button> avec aria-label, rendez la navigation possible au clavier, signalez les changements avec aria-live="polite", mettez l’auto-play en pause au focus et respectez prefers-reduced-motion pour les utilisateurs sensibles aux animations.Plan de l'article
- Créer un carrousel HTML/CSS moderne : guide pas à pas
- Choisir le type de carrousel adapté à son projet
- Structurer un diaporama interactif en HTML
- Personnaliser le design avec CSS pour un rendu unique
- Intégrer l’interactivité avec JavaScript
- Optimiser le carrousel HTML pour le référencement naturel
- Éviter les pièges courants et améliorer l’accessibilité
- Adapter son carrousel aux tendances actuelles du web design
- 🎯 À retenir
- FAQ