Satu baris animation: denyut 1.2s ease-in-out infinite pada chapter sebelumnya baru membuka pintu. Di balik shorthand itu ada delapan properti yang mengatur hampir semua aspek animasi: berapa kali berulang, ke arah mana berputar, bagaimana keadaan awal dan akhirnya ditahan, sampai cara menghentikannya sementara. Chapter ini membongkar semuanya satu per satu, dan setelahnya kita bisa membaca shorthand animation apa pun tanpa menebak.
Delapan Properti animation #
| Properti | Peran | Nilai contoh |
|---|---|---|
animation-name | nama @keyframes yang dijalankan | denyut |
animation-duration | lama satu putaran | 1.2s |
animation-timing-function | ritme gerakan dalam putaran | ease-in-out |
animation-delay | jeda sebelum mulai | 0.5s |
animation-iteration-count | jumlah pengulangan | 3, infinite |
animation-direction | arah tiap putaran | alternate |
animation-fill-mode | penahan keadaan awal/akhir | both |
animation-play-state | berjalan atau dijeda | paused |
Tiga properti pertama berperilaku persis seperti pasangan transition-nya: duration mengatur lama, timing-function memilih kurva, delay menunda mulai. Tiga berikutnya — iteration-count, direction, fill-mode — adalah kemampuan baru yang tidak dimiliki transition. Play-state melengkapi semuanya.
iteration-count dan direction #
animation-iteration-count menentukan berapa kali animasi berputar: angka bebas (termasuk pecahan seperti 2.5) atau infinite untuk tanpa batas. animation-direction mengatur arah tiap putaran:
| Nilai | Perilaku |
|---|---|
normal | setiap putaran berjalan dari titik awal ke titik akhir |
reverse | setiap putaran berjalan dari akhir ke awal |
alternate | putaran ganjil maju, putaran genap mundur |
alternate-reverse | kebalikannya: putaran pertama mundur, berikutnya maju |
Kombinasi infinite dan alternate menghasilkan gerakan bolak-balik yang mulus — elemen naik lalu turun tanpa pernah melompat kembali ke posisi awal. Bentuk longhand-nya seperti ini:
.bola-loncat {
animation-name: pantul;
animation-duration: 1s;
animation-timing-function: ease-in-out;
animation-iteration-count: infinite;
animation-direction: alternate;
}fill-mode: Menahan Keadaan Awal dan Akhir #
Masalah yang hampir pasti ditemui: animasi sekali jalan yang selesai lalu melompat kembali ke tampilan aslinya. Contohnya panel yang masuk dari bawah dengan opacity: 0 — setelah animasi usai, panel kembali ke gaya dasarnya dan kelihaian geraknya terasa percuma. animation-fill-mode mengatur keadaan mana yang ditahan di luar durasi:
| Nilai | Selama delay | Setelah selesai |
|---|---|---|
none | gaya dasar | gaya dasar |
forwards | gaya dasar | menahan keadaan 100% |
backwards | menahan keadaan 0% | gaya dasar |
both | menahan keadaan 0% | menahan keadaan 100% |
.panel-selamat-datang {
animation: muncul 0.6s ease-out 0.4s both;
}
@keyframes muncul {
from {
opacity: 0;
transform: translateY(12px);
}
to {
opacity: 1;
transform: translateY(0);
}
}both dipilih karena panel ini punya delay 0.4 detik: selama jeda, panel sudah menahan keadaan 0% sehingga tidak terlihat lebih dulu; setelah gerakan selesai, keadaan akhirnya ditahan pula. Tanpa fill-mode, panel akan tampak penuh selama jeda, berkedip saat animasi dimulai, lalu melompat balik ketika usai.
play-state: Jeda yang Dikendalikan #
animation-play-state punya dua nilai: running dan paused. Pasangkan dengan pseudo-class untuk memberi kendali jeda kepada pengguna:
.papan-umum:hover {
animation-play-state: paused;
}Bola berikut memantul dengan alternate, dan seluruh area pantulan menjadi tombol jeda lewat animation-play-state:
Saat dijeda, bola membeku persis di titik terakhirnya — bukan mulai lagi dari awal; trik inilah yang dipakai untuk marquee berjalan, carousel otomatis, atau gerakan apa pun yang mungkin ingin diamati pembaca lebih lama.
Shorthand animation dan Urutan Nilainya #
Aturan pembacaan shorthand animation sama dengan transition: nilai waktu pertama adalah duration, nilai waktu kedua adalah delay, dan sisanya dicocokkan menurut jenisnya. Bentuk longhand pada bagian tadi diringkas menjadi:
.bola-loncat {
animation: pantul 1s ease-in-out infinite alternate;
}Pembacaannya: nama pantul, durasi 1 detik, kurva ease-in-out, diulang tanpa batas dengan arah bolak-balik. Dua catatan penting soal shorthand:
- Hindari nama keyframes yang bertabrakan dengan kata kunci animation seperti
running,paused, atauinfinite— dalam shorthand, parser bisa membacanya sebagai nilai properti lain. - Shorthand mereset semua properti yang tidak disebut ke nilai awalnya, termasuk longhand yang ditulis sebelumnya. Letakkan shorthand lebih dulu, lalu timpa dengan longhand bila perlu — kebiasaan yang sama dengan shorthand transition.
Kesalahan Umum #
| Kesalahan | Akibatnya | Perbaikan |
|---|---|---|
| mengira delay berulang tiap putaran | jeda hanya terjadi sekali sebelum putaran pertama | sisipkan jeda di dalam @keyframes, misal blok 0% dan 30% bernilai sama |
| animasi masuk melompat setelah usai | gaya dasar kembali menang begitu animasi berakhir | tambahkan animation-fill-mode: forwards atau both |
| shorthand ditulis setelah longhand | longhand yang tidak disebut shorthand kembali ke nilai awal | urutkan shorthand lebih dulu |
Ringkasan #
Delapan properti animation memberi kendali penuh: animation-name dan animation-duration menjalankan resep, timing-function dan delay mengatur ritme, iteration-count dan direction mengatur pengulangan, fill-mode menahan keadaan di luar durasi, dan play-state menaruh rem di tangan pembaca. Semua mesin gerakan pada section ini kini lengkap. Chapter berikutnya menyusun potongan-potongan itu menjadi resep-resep siap pakai untuk hover dan fokus.