Cours HTML et CSS · Module 6: Animations CSS
animation-timing-function
Dans cette leçon5
Imagine comment les anciens Égyptiens transportaient d'énormes blocs de pierre pour construire les pyramides. Certains blocs glissaient à une vitesse constante et régulière sur des rails en bois - c'est l'équivalent de linear. D'autres démarraient lentement, le temps que les ouvriers prennent de l'élan, puis accéléraient - c'est ease-in. D'autres encore filaient au départ mais ralentissaient lors du positionnement précis - c'est ease-out.
La propriété animation-timing-function en CSS permet exactement ce type de contrôle sur le rythme de l'animation, en définissant comment les valeurs intermédiaires sont calculées au cours de l'animation. Cela te permet de créer différents effets, comme l'accélération, la décélération ou des courbes de transition personnalisées.
Fonctions de timing prédéfinies
Il existe de nombreuses valeurs prédéfinies pour animation-timing-function qui peuvent être utilisées pour obtenir différents effets.
Linear
L'animation a un rythme constant du début à la fin.
1.animation-linear {
2 animation-timing-function: linear;
3}Ease
L'animation démarre lentement, accélère au milieu, puis ralentit à la fin.
1.animation-ease {
2 animation-timing-function: ease;
3}Ease-in
L'animation démarre lentement puis accélère.
1.animation-ease-in {
2 animation-timing-function: ease-in;
3}Ease-out
L'animation démarre vite puis ralentit.
1.animation-ease-out {
2 animation-timing-function: ease-out;
3}Ease-in-out
L'animation démarre lentement, accélère au milieu, puis ralentit de nouveau.
1.animation-ease-in-out {
2 animation-timing-function: ease-in-out;
3}Courbes de Bézier personnalisées
Pour des effets plus avancés, tu peux définir ta propre courbe de Bézier à l'aide de la fonction cubic-bezier.
1.animation-custom {
2 animation-timing-function: cubic-bezier(0.68, -0.55, 0.27, 1.55);
3}Ces quatre valeurs représentent les paramètres de la courbe de Bézier qui contrôlent la forme de la fonction de transition.
Exemples d'animations utilisant animation-timing-function
Exemple 1 : animation à rythme constant (Linear)
1@keyframes slide {
2 0% { left: 0; }
3 100% { left: 100px; }
4}
5
6.linear-animation {
7 position: relative;
8 animation: slide 2s linear infinite;
9}Exemple 2 : animation avec courbe Ease
1@keyframes ease-slide {
2 0% { left: 0; }
3 100% { left: 100px; }
4}
5
6.ease-animation {
7 position: relative;
8 animation: ease-slide 2s ease infinite;
9}Exemple 3 : courbe de Bézier personnalisée
1@keyframes custom-slide {
2 0% { left: 0; }
3 100% { left: 100px; }
4}
5
6.custom-animation {
7 position: relative;
8 animation: custom-slide 2s cubic-bezier(0.68, -0.55, 0.27, 1.55) infinite;
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="linear-animation">Animation Linear</div>
11 <div class="ease-animation">Animation Ease</div>
12 <div class="custom-animation">Animation Bézier personnalisée</div>
13</body>
14</html>Tâche : créer une animation utilisant différentes fonctions de timing
Ta tâche consiste à créer une animation pour trois éléments différents. Chaque élément doit utiliser une animation-timing-function différente :
- Animation Linear : l'élément doit se déplacer horizontalement à un rythme constant.
- Animation Ease-in-out : l'élément doit se déplacer horizontalement, en démarrant lentement, en accélérant au milieu et en ralentissant à la fin.
- Animation avec courbe de Bézier personnalisée : l'élément doit se déplacer horizontalement à l'aide d'une courbe de Bézier personnalisée.
Étapes à réaliser :
- Crée un fichier HTML et ajoute trois éléments qui seront animés.
- Définis des
@keyframespour une animation qui déplace les éléments horizontalement. - Applique les propriétés
animation-timing-functionappropriées à chaque élément. - Ajoute les styles dans un fichier CSS et charge-le dans le fichier HTML.
Exemple :
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 <style>
8 @keyframes slide {
9 0% { left: 0; }
10 100% { left: 100px; }
11 }
12
13 .animation-container {
14 position: relative;
15 width: 100px;
16 height: 50px;
17 margin: 20px;
18 background-color: lightblue;
19 }
20
21 .linear-animation {
22 animation: slide 2s linear infinite;
23 }
24
25 .ease-in-out-animation {
26 animation: slide 2s ease-in-out infinite;
27 }
28
29 .custom-animation {
30 animation: slide 2s cubic-bezier(0.68, -0.55, 0.27, 1.55) infinite;
31 }
32 </style>
33</head>
34<body>
35 <div class="animation-container linear-animation">Linear</div>
36 <div class="animation-container ease-in-out-animation">Ease-in-out</div>
37 <div class="animation-container custom-animation">Custom</div>
38</body>
39</html>Grâce à la propriété animation-timing-function, tu as un contrôle total sur le rythme de l'animation, ce qui te permet de créer des effets visuels plus avancés et intéressants sur les pages web.
« Comme dit Mohamed : le tempo d'une animation, c'est comme le tempo de la construction d'une pyramide - trop rapide et tout s'effondre, trop lent et personne ne verra le résultat. Trouve l'équilibre parfait avec animation-timing-function ! »
Essaie différentes fonctions de timing 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, #1a0a2e, #2d1b4e);
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 width: 100%;
20 max-width: 600px;
21 padding: 20px;
22}
23
24h2 {
25 margin-bottom: 30px;
26 color: #f0c040;
27}
28
29.river {
30 background: linear-gradient(180deg, #1565c0, #0d47a1);
31 height: 120px;
32 border-radius: 10px;
33 display: flex;
34 align-items: center;
35 overflow: hidden;
36 position: relative;
37}
38
39.boat {
40 font-size: 24px;
41 background: #8d6e2e;
42 color: white;
43 padding: 10px 20px;
44 border-radius: 8px;
45 position: relative;
46 white-space: nowrap;
47 /* Ajoute l'animation ici */
48 /* Utilise @keyframes sail avec translateX */
49 /* animation: sail 8s linear infinite alternate; */
50}
51
52/* Définis @keyframes sail */
53/* 0% { transform: translateX(-100px); } */
54/* 100% { transform: translateX(400px); } */
55
56.hint {
57 margin-top: 20px;
58 color: #aaa;
59 font-style: italic;
60}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. Quelle valeur d'animation-timing-function fait démarrer l'animation lentement, accélérer, puis finir lentement ?
2. Qu'est-ce que cubic-bezier() dans les animations CSS ?
Tâches pratiques dans le jeu
- Éditeur de code
Utilise @keyframes pour animer une pyramide qui apparaît, de opacity: 0 à 1 et de scale(0) à scale(1), comme le Sphinx surgissant des sables du temps.