Animasi CSS (Keyframes)
Lebih dari sekadar transisi! Pelajari cara membuat animasi yang lebih kompleks dan terkontrol di CSS menggunakan aturan `@keyframes` dan berbagai properti `animation-*`.
Kalau transisi itu buat perubahan dari satu state ke state lain, animasi dengan @keyframes
ini bisa bikin gerakan yang lebih kompleks dengan banyak step.
Jadi Sutradara Animasi di Web: Menguasai @keyframes
CSS!
Udah bisa bikin efek perubahan halus pake transisi CSS? Keren! Transisi itu cocok banget buat perubahan style dari satu state ke state lain (misalnya, dari kondisi normal ke kondisi :hover
). Tapi, gimana kalau kamu pengen bikin animasi yang lebih kompleks, yang punya beberapa tahapan atau "adegan" di tengah-tengahnya, atau yang bisa ngulang-ngulang terus tanpa perlu interaksi pengguna?
Nah, buat kebutuhan kayak gitu, CSS punya senjata yang lebih canggih: Animasi CSS menggunakan aturan @keyframes
dan properti animation-*
. Dengan ini, kamu bisa jadi kayak sutradara yang ngatur alur cerita animasi elemenmu, frame per frame!
Apa Itu @keyframes
?
Aturan @keyframes
dipake buat ngedefinisiin tahapan-tahapan (atau "key frames") dari sebuah animasi. Kamu nentuin gimana style sebuah elemen berubah di titik-titik waktu tertentu selama animasi berlangsung.
- Sintaks Dasar
@keyframes
:css @keyframes nama-animasi-kamu { /* Tahapan animasi didefinisikan di sini */ from { /* atau 0% */ properti: nilai-awal; } /* Kamu bisa nambahin persentase di tengah-tengah */ 50% { properti: nilai-tengah; } to { /* atau 100% */ properti: nilai-akhir; } }
@keyframes
: Keyword buat memulai definisi animasi.nama-animasi-kamu
: Kamu bebas ngasih nama buat animasimu (tanpa spasi, pake tanda hubung kalau multi-kata, misalgoyang-goyang
,muncul-dari-bawah
). Nama ini yang nanti bakal kamu panggil di propertianimation-name
.from
(atau0%
): Nentuin style di awal animasi.to
(atau100%
): Nentuin style di akhir animasi.- Persentase (
0%
-100%
): Kamu bisa nambahin sebanyak mungkin "keyframe" di antarafrom
danto
pake persentase buat ngontrol style di titik-titik waktu spesifik selama animasi. Misalnya,25%
,50%
,75%
.
Contoh Definisi @keyframes
Sederhana:
@keyframes ubah-warna-background {
from { background-color: red; } /* Mulai dari merah */
50% { background-color: yellow; } /* Di tengah jadi kuning */
to { background-color: blue; } /* Berakhir jadi biru */
}
@keyframes geser-dan-memudar {
0% {
transform: translateX(0);
opacity: 1;
}
100% {
transform: translateX(200px);
opacity: 0;
}
}
Menerapkan Animasi ke Elemen dengan Properti animation-*
Setelah kamu ngedefinisiin @keyframes
-nya, kamu perlu "masang" animasi itu ke elemen HTML yang kamu mau pake berbagai properti animation-*
.
-
animation-name
:- Nentuin nama
@keyframes
yang mau dipake buat elemen ini. - Nilainya harus persis sama kayak nama yang kamu kasih di
@keyframes
. - Contoh:
animation-name: ubah-warna-background;
- Nentuin nama
-
animation-duration
:- Nentuin berapa lama satu siklus animasi itu berlangsung, dari
0%
sampe100%
. - Nilainya pake satuan waktu (
s
ataums
). Ini wajib diset kalau mau animasinya jalan! - Contoh:
animation-duration: 3s;
(animasi berlangsung 3 detik).
- Nentuin berapa lama satu siklus animasi itu berlangsung, dari
-
animation-timing-function
:- Sama kayak
transition-timing-function
, ini nentuin kurva percepatan animasi. - Nilai umum:
ease
,linear
,ease-in
,ease-out
,ease-in-out
,cubic-bezier(...)
. - Contoh:
animation-timing-function: linear;
- Sama kayak
-
animation-delay
:- Nentuin waktu tunda (delay) sebelum animasi dimulai.
- Nilainya pake satuan waktu (
s
ataums
). - Contoh:
animation-delay: 1s;
(animasi baru mulai 1 detik setelah halaman load atau pemicu lain).
-
animation-iteration-count
:- Nentuin berapa kali animasi bakal diulang.
- Nilainya bisa:
- Angka (misal,
3
buat ngulang 3 kali). infinite
(buat animasi ngulang terus-terusan tanpa henti).
- Angka (misal,
- Defaultnya
1
(jalan sekali aja). - Contoh:
animation-iteration-count: infinite;
-
animation-direction
:- Nentuin apakah animasi harus jalan bolak-balik atau cuma maju aja pas diulang.
- Nilai umum:
normal
(default): Animasi jalan dari0%
ke100%
tiap iterasi.reverse
: Animasi jalan dari100%
ke0%
tiap iterasi.alternate
: Animasi jalan maju di iterasi ganjil (0%
ke100%
), terus mundur di iterasi genap (100%
ke0%
).alternate-reverse
: Kebalikanalternate
. Mundur dulu, baru maju.
- Contoh:
animation-direction: alternate;
(cocok buat efek goyang-goyang atau pulse).
-
animation-fill-mode
:- Nentuin style apa yang dipake elemen pas animasi lagi gak jalan (sebelum delay atau setelah selesai).
- Nilai umum:
none
(default): Elemen gak nerapin style dari animasi pas lagi gak jalan. Dia bakal pake style normalnya.forwards
: Setelah animasi selesai, elemen bakal tetep nahan style dari keyframe terakhir (100%
atauto
).backwards
: Sebelum animasi mulai (selamaanimation-delay
), elemen bakal langsung nerapin style dari keyframe pertama (0%
ataufrom
).both
: Gabunganforwards
danbackwards
.
- Contoh:
animation-fill-mode: forwards;
(biar elemen gak balik ke style awal setelah animasi selesai).
-
animation-play-state
:- Nentuin apakah animasi lagi jalan (
running
- default) atau lagi di-pause (paused
). - Biasanya diubah pake JavaScript buat ngontrol animasi (misal, tombol pause/play).
- Contoh:
animation-play-state: paused;
- Nentuin apakah animasi lagi jalan (
Contoh Penerapan Properti animation-*
:
.kotak-bergerak {
width: 100px;
height: 100px;
background-color: tomato;
position: relative; /* Biar bisa digeser pake transform */
animation-name: geser-dan-memudar; /* Panggil @keyframes yg udah dibuat */
animation-duration: 4s;
animation-timing-function: ease-in-out;
animation-delay: 0.5s;
animation-iteration-count: infinite; /* Ulang terus */
animation-direction: alternate; /* Bolak-balik */
animation-fill-mode: both;
}
/* Pastikan @keyframes geser-dan-memudar sudah didefinisikan: */
@keyframes geser-dan-memudar {
0% {
transform: translateX(0) scale(1);
opacity: 1;
background-color: tomato;
}
50% {
transform: translateX(100px) scale(1.2);
opacity: 0.5;
background-color: gold;
}
100% {
transform: translateX(0) scale(1); /* Balik lagi ke posisi & ukuran awal */
opacity: 1;
background-color: mediumseagreen;
}
}
Di contoh ini, .kotak-bergerak
bakal animasi geser, berubah ukuran, berubah warna, dan memudar secara bolak-balik terus-terusan.
Shorthand animation
: Nulis Semuanya Jadi Satu Baris!
Sama kayak transition
, ada juga properti shorthand animation
buat nulis semua properti animation-*
jadi satu baris. Ini cara yang paling sering dipake.
- Sintaks Umum (urutan disarankan, tapi fleksibel untuk beberapa):
animation: name duration timing-function delay iteration-count direction fill-mode play-state;
- Minimal yang wajib ada:
animation-name
dananimation-duration
. Sisanya opsional dan bakal pake nilai default.
Contoh Penggunaan Shorthand animation
:
.spinner-berputar {
width: 50px;
height: 50px;
border: 5px solid lightgray;
border-top-color: dodgerblue; /* Bikin satu sisi beda warna buat efek putaran */
border-radius: 50%;
/* Shorthand: nama, durasi, timing-function, iteration-count */
animation: putaran 0.8s linear infinite;
}
@keyframes putaran {
from { transform: rotate(0deg); }
to { transform: rotate(360deg); }
}
.pesan-muncul {
opacity: 0; /* Awalnya transparan */
transform: translateY(20px); /* Awalnya agak ke bawah */
/* Animasi bernama 'muncul', durasi 0.5s, gaya ease-out, */
/* delay 0.2s, jalan sekali, nahan style akhir, jalan otomatis */
animation: muncul 0.5s ease-out 0.2s 1 forwards running;
}
@keyframes muncul {
to {
opacity: 1;
transform: translateY(0);
}
}
Kapan Pake Transisi vs. Kapan Pake Animasi Keyframes?
-
Transisi CSS (
transition
):- Cocok buat perubahan style yang simpel dari satu state awal ke satu state akhir.
- Biasanya dipicu sama interaksi pengguna (kayak
:hover
,:focus
). - Lebih gampang disetup buat efek-efek kecil.
-
Animasi CSS (
@keyframes
&animation
):- Cocok buat animasi yang lebih kompleks dengan banyak tahapan (keyframe).
- Bisa ngulang-ngulang otomatis (
infinite
) tanpa perlu pemicu. - Ngasih kontrol yang lebih detail atas alur waktu dan properti animasi.
- Bisa punya beberapa animasi berbeda di satu elemen.
Seringkali, kamu bisa ngombinasiin keduanya atau milih salah satu tergantung kebutuhan efek yang mau kamu capai.
Animasi CSS dengan @keyframes
ini bener-bener ngebuka pintu buat kreativitas tanpa batas di web! Kamu bisa bikin loading spinner, efek teks yang ngetik sendiri, karakter yang bergerak, dan macem-macem lagi cuma pake CSS.
Kuncinya adalah ngertiin gimana cara ngedefinisiin @keyframes
dan gimana cara ngontrolnya pake berbagai properti animation-*
. Jangan takut buat eksperimen dan liat contoh-contoh animasi keren di web buat dapet inspirasi!
Kuis Animasi CSS (@keyframes)
Pertanyaan 1 dari 5
Aturan CSS apa yang digunakan untuk mendefinisikan tahapan-tahapan atau 'key frames' dari sebuah sekuens animasi?