Animation d’un slider automatique en CSS pas à pas CSS42

Cet exercice pas à pas est destiné à vous guider lors de la création d’un slider automatique d’images animées en CSS.

Slider automatique
https://juliencrego.com/slider.html

Consignes de l’exercice

Préparation des fichiers de l’exercice

Créez un dossier racine à l’emplacement de votre choix.

HTML : Construisez une page HTML de base en prenant soin de l’enregistrer dans votre dossier racine.

Solution HTML

Voici la structure de base d’une page HTML.

HTML
<!doctype html><html lang="fr">    <head>        <meta charset="utf-8">        <title>Titre de la page</title>    </head>    <body>    </body></html>

HTML : Créez une feuille de style et liez-la à la page HTML.

Solution HTML

Le code ci-dessous doit être placé dans l’en-tête <head> de la page HTML. Il est nécessaire de personnaliser la valeur de l’attribut href afin qu’elle corresponde à l’emplacement et au nom du fichier CSS à lier.

HTML
<link  rel="stylesheet" type="text/css" href="style.css">

Récupérez trois images de votre choix pour créer le slider. Si nécessaire, recadrez-les ou redimensionnez-les afin qu’elles aient toutes les trois les mêmes dimensions. Si vous souhaitez plus d’images dans le slider, il suffira d’adapter les dimensions.

Si vous le souhaitez, vous pouvez récupérer trois images d’exemple en cliquant ci-dessous :

Préparation du slider

HTML : Créer un conteneur <div></div> avec la classe slider.

Solution HTML
HTML
<div class="slider"></div>

HTML : À l’intérieur du conteneur principal, ajoutez un second conteneur <div></div> avec la classe slider-content.

Solution HTML
HTML
<div class="slider">    <div class="slider-content">    </div></div>

HTML : À l’intérieur du conteneur .slider-content, insérez les trois images à l’aide de balises <img>. Veillez à ne laisser aucun espace ni retour à la ligne entre les balises afin d’éviter l’apparition d’espaces entre les images.

Solution HTML
HTML
<div class="slider">    <div class="slider-content">      <img src="img-1.jpg"><img src="img-2.jpg"><img src="img-3.jpg">    </div></div>

CSS : Ajoutez une bordure de couleur différente pour chacun des deux conteneurs. Ces bordures sont ajoutées afin de bien visualiser ce que l’on va faire. Vous pourrez les enlever lorsque l’exercice sera terminé.

Solution CSS
CSS
.slider {    outline: 1px solid red;}.slider-content{    outline: 1px solid blue;}

CSS : Définissez une largeur de 100% pour le conteneur principal .slider, afin qu’il occupe toute la largeur disponible dans son élément parent.

Solution CSS
CSS
.slider {    width: 100%;    outline: 1px solid red;}

CSS : Définissez la largeur du conteneur .slider-content à 300% de celle du conteneur principal. Il doit ainsi être trois fois plus large que la zone d’affichage du slider, puisque le slider contiendra 3 images.

CSS : Définissez la largeur de chaque image à 33.333333% de celle du conteneur .slider-content. Les trois images doivent ainsi se répartir sur toute la largeur de ce conteneur.

CSS
.slider-content img {    width: 33.333333%;}

Mise en place de l’animation

Le slider est prêt pour être animé. Le principe étant d’avoir un élément mobile slider-content qui va se déplacer latéralement à l’intérieur d’un élément fixe slider.

L’élément slider va être réglé pour que tout le contenu qui déborde soit invisible pour l’utilisateur.

CSS : Associez à slider-content l’animation nommée slider pour une durée de 10s.

Solution CSS
CSS
.slider-content {    outline: 1px solid blue;    width: 300%;    animation-name: slider;    animation-duration: 10s;}

CSS : Préparez les keyframes de l’animation slider avec deux étapes 0 et 100%.

Solution CSS
CSS
@keyframes slider {  0% {  }  100% {  }}

CSS : Utilisez la propriété transform et la fonction translateX() pour déplacer horizontalement le conteneur .slider-content. À 0% de l’animation, il doit conserver sa position initiale. À 100%, il doit être déplacé vers la gauche de deux tiers de sa propre largeur, afin d’afficher la troisième image.

Solution CSS
CSS
@keyframes slider {    0% {        transform: translateX(0);    }    100% {        transform: translateX(-66.666667%);    }}

Réglage de l’animation

Pour le moment nous avons bien une animation qui se lance, mais il va falloir la régler plus précisément.

CSS : Il est probablement temps de masquer la partie de slider-content qui déborde de slider. Pour cela, utilisez la propriété overflow sur l’élément slider. Profitez-en pour supprimer les deux bordures que nous avions mises pour visualiser nos deux conteneurs.

Solution CSS
CSS
.slider {    width: 100%;    overflow: hidden;}.slider-content {    width: 300%;    animation-name: slider;    animation-duration: 10s;}

CSS : Utilisez la propriété animation-iteration-count pour faire en sorte que l’animation tourne en continu.

Solution CSS
CSS
.slider-content {    width: 300%;    animation-name: slider;    animation-duration: 10s;    animation-iteration-count: infinite;}

CSS : Utilisez la propriété animation-timing-function pour avoir un mouvement continu linéaire sans accélération.

Solution CSS
CSS
.slider-content {    width: 300%;    animation-name: slider;    animation-duration: 10s;    animation-iteration-count: infinite;    animation-timing-function: linear;}

Affinage des keyframes

Nous avons pour le moment un mouvement continu. Nous souhaiterions que notre slider défile tout en s’arrêtant un instant sur chaque image.

Sur papier, décomposez les différentes étapes de l’animation.

Solution
  1. Affichage en pause sur l’image 1.
  2. Défilement jusqu’à l’image 2.
  3. Affichage en pause sur l’image 2.
  4. Défilement jusqu’à l’image 3.
  5. Affichage en pause sur l’image 3.

CSS : Définissez les images clés correspondant aux étapes de l’animation que vous avez identifiées à la question précédente.

Solution CSS
CSS
@keyframes slider {    0%, 30% {        transform: translateX(0);    }    33%, 63% {        transform: translateX(-33.333333%);    }    66%, 100% {        transform: translateX(-66.666667%);    }}

CSS : Utilisez la propriété animation-direction pour faire en sorte que l’animation se déroule dans un sens puis dans l’autre de manière alternative. Ainsi le slider doit avoir un mouvement de va-et-vient.

Solution CSS
CSS
.slider-content {    width: 300%;    animation-name: slider;    animation-duration: 10s;    animation-iteration-count: infinite;    animation-direction: alternate; }

En observant l’animation, vous pouvez voir que la durée d’affichage des images 1 et 3 semble plus importante à cause de l’enchaînement des cycles. En effet, nous avons pour le moment le rythme suivant :

1 – 2 – 3 – 3 – 2 – 1 – 1 – 2 – 3 – 3 – 2 – 1 – 1 – 2 – etc

Ajustez donc les images clés pour que les trois images s’affichent aussi longtemps les unes que les autres sur l’animation continue en va-et-vient.

Solution CSS
CSS
@keyframes slider {    0%, 20% {        transform: translateX(0);    }    25%, 70% {        transform: translateX(-33.333333%);    }    75%, 100% {        transform: translateX(-66.666667%);    }}

Solution complète de l’exercice

Voici la solution complète, la plus épurée possible, en deux fichiers. Le fichier HTML contient la structure et le fichier CSS la mise en forme.

HTML
<!doctype html><html lang="fr">    <head>        <meta charset="utf-8">        <meta name="viewport" content="width=device-width, initial-scale=1">        <title>Slider automatique</title>        <link rel="stylesheet" href="style.css">    </head>    <body><div class="slider">    <div class="slider-content">        <img src="img-1.jpg"><img src="img-2.jpg"><img src="img-3.jpg">    </div></div>    </body></html>
CSS
.slider {    margin: auto;    width: 100%;    overflow: hidden;}.slider-content {    width: 300%;    animation-name: slider;    animation-duration: 10s;    animation-iteration-count: infinite;    animation-direction: alternate;    animation-timing-function: linear;}.slider-content img {    width: 33.333333%;}@keyframes slider {    0%, 20% {        transform: translateX(0);    }    25%, 70% {        transform: translateX(-33.333333%);    }    75%, 100% {        transform: translateX(-66.666667%);    }}

Sauf mention contraire*, l’article Animation d’un slider automatique en CSS pas à pas CSS42 et son contenu par Julien Crego sont mis à disposition selon les termes de la licence Creative Commons

Licence Creative Commons

Attribution – Pas d’Utilisation Commerciale – Partage dans les Mêmes Conditions 4.0 International

Cette licence vous permet de remixer, arranger, et adapter cette œuvre à des fins non commerciales tant que vous créditez la source en citant le nom des auteurs et que les nouvelles œuvres sont diffusées selon les mêmes conditions.

* Cette notice est intégrée automatiquement à la fin de chaque article de ce site.

S’abonner
Notification pour
guest

Ce site utilise Akismet pour réduire les indésirables. Découvrez comment les données de vos commentaires sont traitées.

8 Commentaires
Le plus ancien
Le plus récent Le plus populaire
franck
franck
3 années il y a

Bonjour, je me forme au html css, en attendant que ma formation commence et je trouve votre site très bien fait. Je recherchais des exercices, tuto etc… pour en apprendre d’avantage chaque jours. Merci.

qi98
qi98
Répondre à  Julien Crego
2 années il y a

Ca a l’air très bien, mais je me demande pourquoi ça fonctionne bien ici ?

J’ai pourtant fait un coller/copier de ce qui est donné, mais il n’y a pas d’animation, les images sont en colonne !

Vous pourriez m’expliquer parce que je trouve super cette action ?

Cordialement,
Jean-Luc

qi98
qi98
Répondre à  Julien Crego
2 années il y a

Je l’ai fait, mais les 3 images que j’aie faites, s’affichent en ligne et en même temps, glissent vers la gauche puis reviennent quelques secondes plus tard.

Maintenant est de savoir pourquoi ?

Camille
Camille
3 années il y a

Merci pour ce petit tuto super bien fait ! 🙂