Propriétés CSS liées à l’animation 3D
Cet article explique les propriétés CSS liées aux animations 3D.
Nous expliquerons comment fonctionnent les animations 3D en CSS et comment les utiliser avec des exemples de code concrets. Vous apprendrez concrètement à appliquer des transformations 3D à l’aide de la propriété transform
et à ajouter de la profondeur et un effet tridimensionnel avec perspective
et transform-style
.
YouTube Video
HTML pour l'aperçu
css-animation-3d.html
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>CSS 3D Animation</title>
7 <link rel="stylesheet" href="css-base.css">
8 <link rel="stylesheet" href="css-animation-3d.css">
9</head>
10<body>
11 <header>
12 <h1>CSS Properties For 3D Animation</h1>
13 </header>
14 <main>
15 <header>
16 <h2>3D Animation Related Properties</h2>
17 </header>
18
19 <!-- 3D Keyframes Section -->
20 <article>
21 <h3>@keyframes with 3D Effects</h3>
22 <section>
23 <header><h4>animation: rotateY3D 4s linear infinite</h4></header>
24 <section class="sample-view">
25 <section class="sample-view-3d">
26 <div class="box-animation-rotateY">Rotate Y</div>
27 </section>
28 </section>
29 <header><h4>animation: rotateX3D 4s linear infinite</h4></header>
30 <section class="sample-view">
31 <section class="sample-view-3d">
32 <div class="box-animation-rotateX">Rotate X</div>
33 </section>
34 </section>
35 <header><h4>animation: cube-spin 6s ease-in-out infinite</h4></header>
36 <section class="sample-view">
37 <section class="sample-view-3d">
38 <div class="box-animation-cube">Spinning Cube</div>
39 </section>
40 </section>
41 </section>
42 </article>
43
44 <article>
45 <h3>Hover to Flip the Card</h3>
46 <section>
47 <header><h4>HTML</h4></header>
48<pre>
49<div class="card-container">
50 <div class="card">
51 <div class="card-face card-front">
52 <h3>Front</h3>
53 <p>This is the front side</p>
54 </div>
55 <div class="card-face card-back">
56 <h3>Back</h3>
57 <p>This is the back side</p>
58 </div>
59 </div>
60</div>
61</pre>
62 </section>
63 <section class="sample-view" style="height: 270px;">
64 <section class="sample-view-3d-card">
65 <div class="card-container">
66 <div class="card">
67 <div class="card-face card-front">
68 <h3>Front</h3>
69 <p>This is the front side</p>
70 </div>
71 <div class="card-face card-back">
72 <h3>Back</h3>
73 <p>This is the back side</p>
74 </div>
75 </div>
76 </div>
77 </section>
78 </section>
79 </article>
80
81 <article>
82 <h3>3D Animation Cube Example</h3>
83 <section>
84 <header><h4>animation: cube-spin 6s ease-in-out infinite</h4></header>
85 <section class="sample-view" style="height: 300px;">
86 <div class="scene">
87 <div class="cube">
88 <div class="face front">Front</div>
89 <div class="face back">Back</div>
90 <div class="face left">Left</div>
91 <div class="face right">Right</div>
92 <div class="face top">Top</div>
93 <div class="face bottom">Bottom</div>
94 </div>
95 </div>
96 </section>
97 </section>
98 </article>
99 </main>
100</body>
101</html>
Animations et transitions 3D
Les navigateurs web modernes vous permettent de créer des animations 3D tridimensionnelles uniquement avec CSS. Comme vous pouvez créer des interactions légères et attrayantes visuellement sans utiliser JavaScript, cela contribue à améliorer l’UI/UX.
Comment fonctionne l’animation 3D
Les animations CSS 3D utilisent principalement les propriétés suivantes :.
- La propriété
transform
modifie la position, la rotation et l’échelle des éléments. - La propriété
perspective
définit la distance du point de vue pour exprimer la profondeur 3D. - La propriété
transform-style
précise si les éléments enfants doivent être transformés dans l’espace 3D. - La propriété
backface-visibility
contrôle la visibilité de la face arrière des éléments. - Les propriétés
animation
ettransition
sont utilisées pour définir des animations.
@keyframes
et animations 3D
Rotation autour de l’axe Y
Commençons par définir une animation 3D qui fait tourner un élément autour de l’axe Y à l’aide de @keyframes
.
1.sample-view-3d {
2 width: 100px;
3 height: 100px;
4 margin: 1rem auto;
5 perspective: 800px;
6}
7
8.box-animation-rotateY,
9.box-animation-rotateX,
10.box-animation-cube {
11 width: 100%;
12 height: 100%;
13 background: linear-gradient(45deg, #4facfe, #00f2fe);
14 display: flex;
15 align-items: center;
16 justify-content: center;
17 color: white;
18 font-size: 1.1rem;
19 border-radius: 10px;
20 transform-style: preserve-3d;
21}
22
23/* RotateY animation */
24@keyframes rotateY3D {
25 from { transform: rotateY(0deg); }
26 to { transform: rotateY(360deg); }
27}
28
29.box-animation-rotateY {
30 animation: rotateY3D 4s linear infinite;
31}
- L’animation
rotateY3D
fait pivoter l’élément de 360 degrés autour de l’axe Y. - La propriété
transform-style
est définie surpreserve-3d
pour maintenir les transformations 3D des éléments enfants. - La propriété
perspective
définit la distance du point de vue afin d’ajuster la perception de la profondeur. Ici, la valeur définie est800px
.
Rotation autour de l’axe X
Définissons également une animation 3D qui fait tourner un élément autour de l’axe X.
1/* RotateX animation */
2@keyframes rotateX3D {
3 from { transform: rotateX(0deg); }
4 to { transform: rotateX(360deg); }
5}
6
7.box-animation-rotateX {
8 animation: rotateX3D 4s linear infinite;
9}
- L’animation
rotateX3D
fait pivoter l’élément de 360 degrés autour de l’axe X.
Rotation autour des axes X et Y
Définissons une animation 3D composant des rotations sur les axes X et Y.
1/* Cube spin (combination of X and Y rotation) */
2@keyframes cube-spin {
3 0% { transform: rotateX(0deg) rotateY(0deg); }
4 50% { transform: rotateX(180deg) rotateY(180deg); }
5 100% { transform: rotateX(360deg) rotateY(360deg); }
6}
7
8.box-animation-cube {
9 animation: cube-spin 6s ease-in-out infinite;
10}
- Faire tourner sur plusieurs axes crée un effet 3D plus prononcé.
Retourner l’avant et l’arrière d’une carte 3D
Définissons un effet d’animation au survol qui retourne l’avant et l’arrière d’une carte 3D.
1/* 3D perspective wrapper */
2.sample-view-3d-card {
3 perspective: 1000px;
4 width: 300px;
5 height: 200px;
6 margin: 2rem auto;
7}
8
9/* Outer card container */
10.card-container {
11 width: 100%;
12 height: 100%;
13 position: relative;
14 perspective: 1000px;
15}
16
17/* The card itself */
18.card {
19 width: 100%;
20 height: 100%;
21 position: relative;
22 transform-style: preserve-3d;
23 transition: transform 0.8s ease;
24}
25
26/* Both faces */
27.card-face {
28 position: absolute;
29 width: 100%;
30 height: 100%;
31 backface-visibility: hidden;
32 border-radius: 12px;
33 box-shadow: 0 6px 20px rgba(0, 0, 0, 0.2);
34 display: flex;
35 flex-direction: column;
36 justify-content: center;
37 align-items: center;
38 font-family: sans-serif;
39 color: white;
40 font-size: 1.1rem;
41 padding: 1rem;
42}
43
44/* Flip the card on hover */
45.card-container:hover .card {
46 transform: rotateY(180deg);
47}
48
49/* Front side style */
50.card-front {
51 background: linear-gradient(135deg, #00c9ff, #92fe9d);
52}
53
54/* Back side style */
55.card-back {
56 background: linear-gradient(135deg, #fc466b, #3f5efb);
57 transform: rotateY(180deg);
58}
- En définissant la propriété
backface-visibility
surhidden
, on empêche l’arrière de la carte d’apparaître devant. - Appliquer
rotateY(180deg)
à la classe.card-back
crée la face arrière de la carte. - Appliquer
rotateY(180deg)
lors du survol retourne la carte.
Animation 3D d’un cube
Définissons une animation 3D pour un cube. Chaque face du cube apparaît pendant la rotation, exprimant l’effet 3D grâce au survol ou à une animation automatique.
1.scene {
2 width: 200px;
3 height: 200px;
4 perspective: 800px; /* Viewing distance (the smaller the value, the stronger the depth effect) */
5 background-color: rgba(255, 255, 255, 0);
6 border: 0;
7}
8
9.cube {
10 width: 100%;
11 height: 100%;
12 transform-style: preserve-3d;
13 transform: rotateX(0deg) rotateY(0deg);
14 animation: rotateCube 10s infinite linear;
15 position: relative;
16 background-color: rgba(255, 255, 255, 0);
17 border: 0;
18}
19
20.face {
21 position: absolute;
22 width: 200px;
23 height: 200px;
24 background: rgba(0, 128, 255, 0.6);
25 border: 1px solid #fff;
26 display: flex;
27 align-items: center;
28 justify-content: center;
29 font-size: 24px;
30 font-weight: bold;
31}
32
33/* Positioning each face */
34.front { transform: translateZ(100px); }
35.back { transform: rotateY(180deg) translateZ(100px); }
36.left { transform: rotateY(-90deg) translateZ(100px); }
37.right { transform: rotateY(90deg) translateZ(100px); }
38.top { transform: rotateX(90deg) translateZ(100px); }
39.bottom { transform: rotateX(-90deg) translateZ(100px); }
40
41/* Rotation animation */
42@keyframes rotateCube {
43 from {
44 transform: rotateX(0deg) rotateY(0deg);
45 }
46 to {
47 transform: rotateX(360deg) rotateY(360deg);
48 }
49}
- La classe
.cube
est affichée en 3D car sa propriététransform-style
est définie surpreserve-3d
. - Chaque face du cube est avancée à partir du centre du cube en utilisant
translateZ(100px)
, formant ainsi un cube 3D. - L’animation
rotateCube
fait tourner automatiquement le cube en combinant les axes Y et X.
Le point de vue change avec perspective
Réduire la valeur de perspective
rapproche le point de vue de l’élément, mettant en valeur la profondeur et renforçant l’effet 3D. Inversement, augmenter la valeur éloigne le point de vue et donne un effet 3D plus naturel et discret. Ici, modifions la propriété perspective
de 800px
à 200px
pour afficher l’animation 3D du cube.
1.scene {
2 perspective: 200px;
3}
- En passant la propriété
perspective
de800px
à200px
, le point de vue se rapproche et la profondeur est accentuée.
Vous pouvez suivre l'article ci-dessus avec Visual Studio Code sur notre chaîne YouTube. Veuillez également consulter la chaîne YouTube.