Cours HTML et CSS · Module 6: Animations CSS

Animations CSS avancées avec @keyframes

4 min de lecture
Dans cette leçon5

Dans l'Égypte ancienne, les prêtres qui accomplissaient des rituels les répétaient un nombre précis de fois - parfois trois fois, parfois sept fois, et parfois une infinité de fois pour assurer la protection divine. De la même manière en CSS, les animations peuvent être contrôlées à l'aide de différentes propriétés, notamment animation-iteration-count, qui indique combien de fois une animation doit se répéter, et animation-direction, qui indique le sens de l'animation. Ci-dessous, nous présentons plusieurs exemples pratiques utilisant ces propriétés.

Imagine que tu crées une animation représentant la barque solaire de Râ traversant le ciel. La barque doit répéter son trajet chaque jour - le matin elle part de l'est, le soir elle atteint l'ouest, puis elle retourne sous terre pour pouvoir réapparaître au matin. C'est une analogie parfaite pour les propriétés que nous allons apprendre aujourd'hui.

animation-iteration-count

La propriété animation-iteration-count te permet d'indiquer combien de fois une animation doit se répéter.

Exemple 1 : balle qui rebondit

Nous voulons que la balle rebondisse 3 fois.

CSS

1@keyframes bounce {
2  0%, 100% { transform: translateY(0); }
3  50% { transform: translateY(-30px); }
4}
5
6.bouncing-ball {
7  animation: bounce 1s ease-in-out;
8  animation-iteration-count: 3; /* La balle rebondira 3 fois */
9}

Exemple 2 : rotation infinie

Nous voulons qu'un élément tourne à l'infini.

CSS

1@keyframes spin {
2  0% { transform: rotate(0deg); }
3  100% { transform: rotate(360deg); }
4}
5
6.infinite-spin {
7  animation: spin 2s linear infinite;
8  animation-iteration-count: infinite; /* Rotation infinie */
9}

animation-direction

La propriété animation-direction indique le sens de l'animation. Tu peux définir différentes valeurs pour obtenir différents effets :

  • normal (par défaut) - animation du début à la fin.
  • reverse - animation de la fin au début.
  • alternate - l'animation alterne du début à la fin, puis de la fin au début.
  • alternate-reverse - l'animation alterne de la fin au début, puis du début à la fin.

Exemple 3 : clignotement alterné

Nous voulons qu'un élément change de couleur en alternance.

CSS

1@keyframes blink {
2  0%, 100% { background-color: red; }
3  50% { background-color: blue; }
4}
5
6.alternate-blink {
7  animation: blink 1s linear infinite;
8  animation-direction: alternate; /* Change le sens de l'animation */
9}

Techniques avancées

Combiner des propriétés

Nous pouvons combiner différentes propriétés d'animation pour créer des effets plus complexes.

Exemple 4 : balle qui rebondit et tourne

Nous voulons que la balle rebondisse et tourne en même temps, en alternant du début à la fin puis de la fin au début.

CSS

1@keyframes bounce-spin {
2  0%, 100% { transform: translateY(0) rotate(0deg); }
3  50% { transform: translateY(-30px) rotate(180deg); }
4}
5
6.bouncing-spinning-ball {
7  animation: bounce-spin 2s ease-in-out infinite;
8  animation-direction: alternate; /* Rebond et rotation en alternance */
9}

HTML pour les exemples

Pour tester ces animations, crée un fichier HTML et ajoute les éléments appropriés avec les classes attribuées :

1<!DOCTYPE html>
2<html lang="en">
3<head>
4  <meta charset="UTF-8">
5  <meta name="viewport" content="width=device-width, initial-scale=1.0">
6  <title>Animations CSS</title>
7  <link rel="stylesheet" href="styles.css">
8</head>
9<body>
10  <div class="bouncing-ball">Balle qui rebondit</div>
11  <div class="infinite-spin">Rotation infinie</div>
12  <div class="alternate-blink">Éléments clignotants</div>
13  <div class="bouncing-spinning-ball">Balle qui rebondit et tourne</div>
14</body>
15</html>

Récapitulatif

Les propriétés animation-iteration-count et animation-direction en CSS permettent de créer des animations avancées qui peuvent être répétées plusieurs fois et changer de sens. Associées à @keyframes, ces propriétés offrent un contrôle total sur l'apparence et le comportement des éléments de la page, ouvrant la porte à la création de designs plus interactifs et visuellement attrayants.

« Comme dit Mohamed : chaque animation, tel un rituel de pharaon, a son rythme et son sens. Maîtrise-les, et tes pages prendront vie comme les peintures du temple de Karnak ! »

Essaie ces propriétés dans l'éditeur ci-dessous :

Code de cette leçon : style.css
1* {
2  margin: 0;
3  padding: 0;
4  box-sizing: border-box;
5}
6
7body {
8  font-family: 'Segoe UI', sans-serif;
9  background: linear-gradient(180deg, #ff9a56, #d4763a);
10  color: white;
11  min-height: 100vh;
12  display: flex;
13  justify-content: center;
14  align-items: center;
15}
16
17.scene {
18  text-align: center;
19  padding: 20px;
20}
21
22h2 {
23  margin-bottom: 30px;
24  color: #3d2914;
25}
26
27.desert {
28  position: relative;
29  width: 300px;
30  height: 250px;
31  margin: 0 auto;
32}
33
34.pyramid {
35  font-size: 120px;
36  color: #c9a84c;
37  text-shadow: 2px 2px 8px rgba(0, 0, 0, 0.4);
38  position: absolute;
39  top: 20px;
40  left: 50%;
41  transform: translateX(-50%);
42  /* Ajoute l'animation ici */
43  /* Utilise @keyframes appear avec opacity et scale */
44  /* animation: appear 3s ease-out forwards; */
45}
46
47.sand {
48  position: absolute;
49  bottom: 0;
50  width: 100%;
51  height: 60px;
52  background: linear-gradient(180deg, #d4a574, #c9a84c);
53  border-radius: 50% 50% 0 0;
54}
55
56/* Définis @keyframes appear */
57/* 0% { opacity: 0; transform: translateX(-50%) scale(0.3); } */
58/* 100% { opacity: 1; transform: translateX(-50%) scale(1); } */
59
60.hint {
61  margin-top: 20px;
62  color: #3d2914;
63  font-style: italic;
64}

Tu as repéré une erreur dans cette leçon ?

Teste tes connaissances

Réponds aux questions de cette leçon. Choisis une réponse pour voir tout de suite si elle est correcte.

  1. 1. Comment faire pour qu'une animation CSS se répète à l'infini ?

  2. 2. Quelle valeur d'animation-direction fait jouer l'animation dans un sens puis dans l'autre ?

Voici 2 des 3 questions de cette leçon. Réponds aux autres dans le jeu.

Tâches pratiques dans le jeu

  • Éditeur de code

    Crée @keyframes sail : 0% { translateX(-100px) }, 100% { translateX(100vw) }. Applique à .boat : animation: sail 8s linear infinite. Ajoute direction: alternate pour que la barque revienne. Résultat : la barque navigue dans les deux sens !

  • Éditeur de code

    Crée une animation d'étoiles scintillantes avec @keyframes utilisant opacity, animation-iteration-count: infinite, et un animation-delay différent pour chaque étoile.

  • Clique dans l'ordre

    Remets les valeurs d'animation-iteration-count du moins au plus grand nombre de répétitions :

  • Éditeur de code

    Anime un rouleau de papyrus qui se déroule en utilisant scaleX et transform-origin pour simuler le déroulement d'un document antique.

Articles utiles