Properti CSS yang Terkait dengan Animasi 3D
Artikel ini menjelaskan properti CSS yang berkaitan dengan animasi 3D.
Kami akan menjelaskan cara kerja animasi 3D di CSS dan cara menggunakannya dengan contoh kode nyata. Anda akan belajar secara praktis bagaimana menerapkan transformasi 3D menggunakan properti transform dan bagaimana menambahkan kedalaman serta efek tiga dimensi dengan perspective dan transform-style.
YouTube Video
HTML untuk Pratinjau
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>Animasi dan Transisi 3D
Browser web modern memungkinkan Anda membuat animasi 3D tiga dimensi hanya dengan CSS. Karena Anda dapat membuat interaksi yang ringan dan menarik secara visual tanpa menggunakan JavaScript, hal tersebut berkontribusi pada peningkatan UI/UX.
Cara Kerja Animasi 3D
Animasi 3D CSS terutama memanfaatkan properti berikut:.
- Properti
transformmengubah posisi, rotasi, dan skala elemen. - Properti
perspectivemengatur jarak sudut pandang untuk menampilkan kedalaman 3D. - Properti
transform-stylemenentukan apakah elemen anak harus ditransformasikan dalam ruang 3D. - Properti
backface-visibilitymengontrol visibilitas sisi belakang elemen. - Properti
animationdantransitiondigunakan untuk mendefinisikan animasi.
@keyframes dan Animasi 3D
Rotasi di Sekitar Sumbu Y
Mari mulai dengan mendefinisikan animasi 3D yang memutar sebuah elemen di sekitar sumbu Y menggunakan @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}- Animasi
rotateY3Dmemutar elemen sebesar 360 derajat di sekitar sumbu Y. - Properti
transform-stylediatur kepreserve-3duntuk mempertahankan transformasi 3D pada elemen anak. - Properti
perspectivemengatur jarak sudut pandang untuk menyesuaikan kesan kedalaman. Di sini, diatur ke800px.
Rotasi di Sekitar Sumbu X
Mari juga mendefinisikan animasi 3D yang memutar elemen di sekitar sumbu 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}- Animasi
rotateX3Dmemutar elemen sebesar 360 derajat di sekitar sumbu X.
Rotasi di Sekitar Sumbu X dan Y sekaligus
Mari kita definisikan animasi 3D yang menggabungkan rotasi pada sumbu X dan Y secara bersamaan.
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}- Rotasi pada beberapa sumbu menghasilkan efek 3D yang lebih kuat.
Membalik sisi depan dan belakang kartu 3D
Mari definisikan efek animasi hover yang membalik sisi depan dan belakang kartu 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}- Dengan mengatur properti
backface-visibilitykehidden, bagian belakang dicegah agar tidak muncul di bagian depan. - Menerapkan
rotateY(180deg)pada class.card-backmembuat sisi belakang kartu. - Menerapkan
rotateY(180deg)saat hover akan membalik kartu tersebut.
Animasi Kubus 3D
Mari kita definisikan animasi 3D untuk sebuah kubus. Setiap sisi kubus muncul saat berputar, menampilkan efek 3D melalui hover atau animasi otomatis.
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}- Class
.cubeditampilkan dalam bentuk 3D karena propertinyatransform-stylediatur kepreserve-3d. - Setiap sisi kubus didorong ke depan dari tengah kubus menggunakan
translateZ(100px), membentuk kubus 3D. - Animasi
rotateCubesecara otomatis memutar kubus dengan menggabungkan rotasi di sumbu Y dan X.
Sudut pandang berubah dengan perspective
Mengurangi nilai perspective membuat sudut pandang lebih dekat ke elemen, menonjolkan kedalaman dan meningkatkan efek 3D. Sebaliknya, meningkatkan nilainya membuat sudut pandang lebih jauh sehingga menghasilkan tampilan 3D yang lebih alami dan halus. Di sini, mari kita ubah properti perspective dari 800px menjadi 200px untuk menampilkan animasi 3D pada kubus.
1.scene {
2 perspective: 200px;
3}- Dengan mengubah properti
perspectivedari800pxmenjadi200px, sudut pandang menjadi lebih dekat dan kedalaman lebih terlihat.
Anda dapat mengikuti artikel di atas menggunakan Visual Studio Code di saluran YouTube kami. Silakan periksa juga saluran YouTube kami.