Proprietà CSS relative alle animazioni 3D
Questo articolo spiega le proprietà CSS relative alle animazioni 3D.
Spiegheremo come funzionano le animazioni 3D in CSS e come usarle con esempi di codice reali. Imparerai praticamente come applicare trasformazioni 3D usando la proprietà transform
e come aggiungere profondità e un effetto tridimensionale con perspective
e transform-style
.
YouTube Video
HTML per Anteprima
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>
Animazioni e transizioni 3D
I browser web moderni permettono di creare animazioni 3D tridimensionali utilizzando solo il CSS. Poiché puoi creare interazioni leggere e visivamente attraenti senza usare JavaScript, questo contribuisce al miglioramento della UI/UX.
Come funzionano le animazioni 3D
Le animazioni 3D in CSS utilizzano principalmente le seguenti proprietà:.
- La proprietà
transform
modifica la posizione, la rotazione e la scala degli elementi. - La proprietà
perspective
imposta la distanza del punto di vista per esprimere la profondità 3D. - La proprietà
transform-style
specifica se gli elementi figli devono essere trasformati nello spazio 3D. - La proprietà
backface-visibility
controlla la visibilità del retro degli elementi. - Le proprietà
animation
etransition
vengono utilizzate per definire le animazioni.
@keyframes
e animazioni 3D
Rotazione attorno all'asse Y
Iniziamo definendo un'animazione 3D che ruota un elemento attorno all'asse Y usando @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'animazione
rotateY3D
ruota l'elemento di 360 gradi attorno all'asse Y. - La proprietà
transform-style
è impostata supreserve-3d
per mantenere le trasformazioni 3D degli elementi figli. - La proprietà
perspective
imposta la distanza del punto di vista per regolare la percezione della profondità. Qui viene impostato800px
.
Rotazione attorno all'asse X
Definiamo anche un'animazione 3D che ruota un elemento attorno all'asse 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'animazione
rotateX3D
ruota l'elemento di 360 gradi attorno all'asse X.
Rotazione attorno sia all'asse X che all'asse Y
Definiamo un'animazione 3D che combina le rotazioni sia sull'asse X che sull'asse 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}
- La rotazione su più assi crea un effetto 3D più marcato.
Girare il fronte e il retro di una carta 3D
Definiamo un effetto di animazione al passaggio del mouse che gira fronte e retro di una carta 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}
- Impostando la proprietà
backface-visibility
suhidden
, si impedisce al lato posteriore di apparire davanti. - Applicando
rotateY(180deg)
alla classe.card-back
si crea il lato posteriore della carta. - Applicando
rotateY(180deg)
al passaggio del mouse si gira la carta.
Animazione 3D di un cubo
Definiamo un'animazione 3D per un cubo. Ogni faccia del cubo appare mentre ruota, esprimendo l'effetto 3D tramite hover o animazione automatica.
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
viene visualizzata in 3D poiché la sua proprietàtransform-style
è impostata supreserve-3d
. - Ogni faccia del cubo viene spinta in avanti dal centro del cubo usando
translateZ(100px)
, formando un cubo 3D. - L'animazione
rotateCube
ruota automaticamente il cubo combinando gli assi Y e X.
Il punto di vista cambia con perspective
Riducendo il valore di perspective
si avvicina il punto di vista all'elemento, enfatizzando la profondità e migliorando l'effetto 3D. Al contrario, aumentando il valore si allontana il punto di vista, ottenendo un aspetto 3D più naturale e delicato. Qui cambiamo la proprietà perspective
da 800px
a 200px
per mostrare l'animazione 3D del cubo.
1.scene {
2 perspective: 200px;
3}
- Cambiando la proprietà
perspective
da800px
a200px
, il punto di vista si avvicina e la profondità viene maggiormente enfatizzata.
Puoi seguire l'articolo sopra utilizzando Visual Studio Code sul nostro canale YouTube. Controlla anche il nostro canale YouTube.