Panduan lengkap CSS Animations untuk efek bergerak yang kompleks
CSS Animations memungkinkan Anda membuat animasi kompleks dengan menentukan keyframe dan properti animasi.
/* Definisi keyframes */
@keyframes slideIn {
from {
transform: translateX(-100%);
}
to {
transform: translateX(0);
}
}
/* Penerapan animasi */
.box {
animation: slideIn 0.5s ease-out forwards;
background: #9333ea;
}
/* Animasi multiple keyframes */
@keyframes bounce {
0%, 100% {
transform: translateY(0);
}
50% {
transform: translateY(-20px);
}
}
đ Penjelasan Detail:
âĸ @keyframes
- Mendefinisikan tahapan animasi
âĸ animation-name
- Nama keyframe yang akan digunakan
âĸ animation-duration
- Durasi animasi (contoh: 2s)
âĸ animation-timing-function
- Fungsi waktu (ease, linear, etc)
âĸ animation-iteration-count
- Jumlah pengulangan (infinite untuk terus menerus)
/* Animasi dengan delay dan fill-mode */
.item {
animation: fadeIn 0.5s ease 0.3s both;
}
/* Animasi berurutan */
.card:nth-child(1) { animation-delay: 0.1s; }
.card:nth-child(2) { animation-delay: 0.2s; }
.card:nth-child(3) { animation-delay: 0.3s; }
/* Animasi 3D */
@keyframes flip {
0% { transform: rotateY(0); }
100% { transform: rotateY(180deg); }
}
.flip-card {
animation: flip 0.6s ease-in-out forwards;
transform-style: preserve-3d;
}
CSS Animations didukung di semua browser modern (Chrome 43+, Firefox 16+, Safari 9+, Edge 12+). Untuk IE10+, gunakan prefix -ms-.
/* Animation Properties */
animation-name /* Nama keyframe */
animation-duration /* Durasi (1s, 200ms) */
animation-timing-function /* Fungsi waktu */
animation-delay /* Penundaan */
animation-iteration-count /* Jumlah */
animation-direction /* Arah */
animation-fill-mode /* Fill mode */
/* Timing Functions */
ease /* Default */
linear /* Konstan */
ease-in /* Slow start */
ease-out /* Slow end */
cubic-bezier() /* Kustom */
đ Penjelasan Detail:
âĸ Fill modes - Mengontrol state sebelum/sesudah animasi
âĸ Iteration count - Dapat berupa angka atau 'infinite'
âĸ Direction - normal, reverse, alternate, alternate-reverse
âĸ Play state - running atau paused
âĸ Nilai durasi umum: 300-500ms untuk interaksi, 1-3s untuk animasi panjang
/* Animasi dengan JavaScript */
element.style.animation = 'slideIn 0.5s forwards';
/* Animation events */
element.addEventListener('animationend', () => {
console.log('Animation ended');
});
/* Animasi dengan CSS Variables */
@keyframes dynamic {
to {
transform: translateX(var(--distance));
}
}
/* Animasi step */
@keyframes ticker {
to {
transform: translateX(-100%);
}
}
.ticker {
animation: ticker 10s linear infinite;
animation-timing-function: steps(10);
}
Animation events didukung di semua browser modern. CSS Variables dalam animasi memerlukan dukungan untuk kedua fitur tersebut.
Gunakan animasi dengan bijak untuk meningkatkan pengalaman pengguna tanpa mengorbankan performa.
/* â
Good - Performant properties */
@keyframes goodExample {
to {
transform: translateX(100px) scale(1.2);
opacity: 0.8;
}
}
/* â Avoid - Expensive properties */
@keyframes badExample {
to {
width: 500px;
margin-left: 100px;
}
}
/* â
Good - Prefers reduced motion */
@media (prefers-reduced-motion: reduce) {
* {
animation: none !important;
transition: none !important;
}
}
đ Penjelasan Detail:
âĸ Gunakan transform/opacity - Properti ini paling efisien untuk dianimasikan
âĸ Hindari animasi layout properties - width, height, margin menyebabkan reflow
âĸ Gunakan will-change - Untuk memberi tahu browser properti yang akan berubah
âĸ Hormati prefers-reduced-motion - Beberapa pengguna sensitif terhadap animasi
âĸ Batasi animasi simultan - Terlalu banyak animasi membebani performa