Julien Crego
Animations en CSS pas à pas CSS41
Cette exercice pas à pas est destiné à vous guider pour la création d’une première animation en CSS.
Consignes de l’exercice
Préparation des fichiers de l’exercice
HTML : Construisez une page HTML de base.
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">CSS : Modifiez la couleur d’arrière-plan de la page web.
Solution CSS
CSS
body { background-color: #eee;}Mise en place des éléments à animer
HTML : Créez un élément <div> avec la classe container.
Solution HTML
HTML
<div class="container"></div>CSS : Dimensionnez l’élément container pour en faire un carré de 200 pixels de côté et ajoutez-lui une bordure afin de pouvoir le visualiser.

Solution CSS
CSS
.container { width: 200px; height: 200px; border: 1px solid #f00;}HTML : Ajoutez dans l’élément container un second élément <div> avec la classe item.
Solution HTML
HTML
<div class="container"> <div class="item"></div></div>CSS : En utilisant la classe circle, transformez l’élément en carré de 40 pixels de côté et ajoutez-lui une couleur d’arrière-plan.

Solution CSS
CSS
.circle { width: 40px; height: 40px; background-color: #00897B;}CSS : Transformez l’élément intérieur en cercle en modifiant la classe circle.

Indice

Solution CSS
CSS
.circle { width: 40px; height: 40px; background-color: #00897B; border-radius: 50%;}HTML : Ajoutez une seconde classe (en plus de la première) au cercle sous le nom anim-1.
Nous pourrions travailler uniquement avec la classe circle, mais cette seconde classe va nous permettre de distinguer les propriétés CSS permettant de créer le cercle, des propriétés CSS permettant d’animer l’élément en question. Ainsi, nous pourrons facilement avoir plusieurs cercles avec des animations différentes.
Solution HTML
HTML
<div class="container"> <div class="circle anim-1"></div></div>HTML : En utilisant la classe anim-1 et la propriété CSS margin-left, centrez horizontalement le cercle dans le conteneur principal.

Solution CSS
CSS
.anim-1 { margin-left: 80px;}Création de la première animation
CSS : Ajoutez, sur l’élément anim-1, une animation qui s’appelle animation-1, qui dure 2 secondes et qui se répète à l’infini.
Les images clés n’étant pas définies, il ne se passe rien à l’écran pour le moment.
Solution CSS
CSS
.anim-1 { margin-left: 80px; animation-name: animation-1; animation-duration: 2s; animation-iteration-count: infinite;}CSS : Créez un jeu d’images clés de 0% à 100%, et faites en sorte que le cercle se déplace entre le haut et le bas du conteneur.
Comme pour le centrage du cercle, vous pouvez gérer le déplacement en utilisant des marges.

Solution CSS
CSS
@keyframes animation-1 { 0% { } 100% { margin-top: 160px; }}CSS : Ajoutez les propriétés CSS à l’élément animé afin :
- de faire alterner le mouvement ;
- de modifier le rythme de l’animation.

Propriétés CSS
animation-direction animation-timing-function
Solution CSS
CSS
.anim-1 { margin-left: 80px; animation-name: animation-1; animation-duration: 2s; animation-iteration-count: infinite; animation-direction: alternate; animation-timing-function: ease-in-out;}Deuxième cercle
HTML : Dupliquez le cercle et renommez la classe anim-1 en anim-2 sur la copie.

Solution HTML
HTML
<div class="container"> <div class="circle anim-1"></div> <div class="circle anim-2"></div></div>CSS : Pour rendre les deux cercles indépendants, il est nécessaire de les positionner en absolu et de positionner le conteneur principal en relatif. Effectuez donc les modifications nécessaires.
Si vous ne connaissez pas le principe du positionnement relatif et absolu, ce n’est pas grave pour cet exercice, vous pouvez alors regarder la solution à cette question. Notez que nous pourrions très bien pu utiliser des options de positionnement absolu à la place des marges pour effectuer les mêmes animations, cela aurait d’ailleurs été préférable.

Solution CSS
CSS
.container { position: relative; width: 200px; height: 200px; border: 1px solid #f00;}.circle { position: absolute; width: 40px; height: 40px; background-color: #00897b; border-radius: 50%;}CSS : En suivant le même principe que pour le premier cercle, animez le second pour que celui-ci se déplace en diagonale.

Solution CSS
CSS
.anim-2 { margin-top: 160px; animation-name: animation-2; animation-duration: 2s; animation-iteration-count: infinite; animation-direction: alternate; animation-timing-function: ease-in-out;}@keyframes animation-2 { 0% { } 100% { margin-top: 0px; margin-left: 160px; }}Troisième cercle
HTML : Dupliquez le cercle et appliquez-lui la classe anim-3.
CSS : Animez le troisième cercle pour que celui-ci suive une trajectoire en forme de Z.
Vous allez devoir utiliser plus d’images clés que pour les animations précédentes. Chaque changement de direction sera géré par une image clé.

Solution CSS
CSS
.anim-3 { animation-name: animation-3; animation-duration: 2s; animation-iteration-count: infinite; animation-direction: alternate; animation-timing-function: ease-in-out;}@keyframes animation-3 { 0% { } 33% { margin-top: 0px; margin-left: 160px; } 66% { margin-top: 160px; margin-left: 0px; } 100% { margin-top: 160px; margin-left: 160px; }}Peaufinage de l’animation
Cette animation se ressemble à rien, vous ne risquez donc pas de la réutiliser, mais nous allons quand même effectuer quelques manipulations pour essayer de l’améliorer un petit peu.
CSS : Supprimez la bordure du conteneur qui n’était là que pour pouvoir visualiser les déplacements des enfants.
Solution CSS
CSS
.container { width: 200px; height: 200px; position: relative;}CSS : Simplifiez les classes anim-1, anim-2 et anim-3 en regroupant les éléments communs.
Vous pouvez pour cela utiliser la classe circle qui est commune ou plutôt créer une nouvelle classe anim.
Solution HTML
HTML
<div class="container"> <div class="circle anim anim-1"></div> <div class="circle anim anim-2"></div> <div class="circle anim anim-3"></div></div>Solution CSS
CSS
.anim { animation-duration: 2s; animation-iteration-count: infinite; animation-direction: alternate; animation-timing-function: ease-in-out;}.anim-1 { margin-left: 80px; animation-name: animation-1;}@keyframes animation-1 { 0% { } 100% { margin-top: 160px; }}.anim-2 { margin-top: 160px; animation-name: animation-2;}@keyframes animation-2 { 0% { } 100% { margin-top: 0px; margin-left: 160px; }}.anim-3 { animation-name: animation-3;}@keyframes animation-3 { 0% { } 33% { margin-top: 0px; margin-left: 160px; } 66% { margin-top: 160px; margin-left: 0px; } 100% { margin-top: 160px; margin-left: 160px; }}CSS : Rendez cette animation encore plus splendide en variant les couleurs.

Solution CSS
CSS
body { background-color: #eee; padding: 3rem;}.container { width: 200px; height: 200px; aborder: 1px solid #f00; position: relative;}.circle { position: absolute; width: 40px; height: 40px; background-color: #00897b; border-radius: 50%;}.anim { animation-duration: 2s; animation-iteration-count: infinite; animation-direction: alternate; animation-timing-function: ease-in-out;}.anim-1 { margin-left: 80px; animation-name: animation-1;}@keyframes animation-1 { 0% { } 100% { margin-top: 160px; background-color: #C51162; }}.anim-2 { margin-top: 160px; animation-name: animation-2;}@keyframes animation-2 { 0% { background-color: #F9A825; } 100% { margin-top: 0px; margin-left: 160px; background-color: #42A5F5; }}.anim-3 { animation-name: animation-3;}@keyframes animation-3 { 0% { background-color: #D500F9; } 33% { margin-top: 0px; margin-left: 160px; } 66% { margin-top: 160px; margin-left: 0px; } 100% { margin-top: 160px; margin-left: 160px; background-color: #E6EE9C; }}Sauf mention contraire*, l’article Animations en CSS pas à pas CSS41 et son contenu par Julien Crego sont mis à disposition selon les termes de la 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.

Commentaires