🎨

Frontend Fundamentals

Kursus Gratis — Fullstack Talent

10

Transisi & Animasi CSS

📖 12 menit baca 🏷️ Advanced

Sebuah website yang statis dan kaku terasa membosankan. Pengguna modern mengharapkan tombol yang bereaksi halus saat disentuh, objek yang muncul dengan gaya, dan antarmuka yang terasa "hidup".

Dulu kita membutuhkan puluhan baris Javascript yang kompleks untuk menggerakkan sebuah kotak. Kini, CSS3 Transitions & Animations memungkinkan kita menganimasikan elemen HTML langsung dari mesin rendering browser dengan performa 60 frame-per-detik (60fps) yang sangat mulus!

⏳ CSS Transition (Perubahan Halus)

Transition berfungsi untuk memperlambat proses perubahan nilai pada sebuah properti (misalnya dari warna Biru berubah menjadi Merah) dari yang awalnya instan (langsung ganti), menjadi sebuah proses bertahap.

1. Tanpa Transition

Perubahan kaku & instan. Sangat kasar di mata.

2. Dengan Transition

Bergerak secara perlahan, membesar, memutar, dan berganti warna selama 1 detik.

CSS Breakdown
.tombol-halus {
  background: green;
  transform: scale(1);

  /* ---- INITILAIZE TRANSITION 4 SEKAWAN ---- */
  transition-property: all;      /* 1. Apa yang dianimasikan? (all=semua perubahan) */
  transition-duration: 1s;       /* 2. Berapa lama prosesnya? (1 detik) */
  transition-timing-function: ease-in-out; /* 3. Gayanya? (Mulai pelan, ngebut, di akhir pelan) */
  transition-delay: 0s;          /* 4. Ditunda gak mulainya? (0 detik) */
  
  /* Atau, gunakan tulisan cepat (Shorthand): */
  transition: all 1s ease-in-out 0s;
}

/* Trigger-nya (Kondisi saat Hover) */
.tombol-halus:hover {
  background: darkgreen;
  transform: scale(1.2) rotate(6deg); /* Membesar 20% & muter 6 derajat */
}

🛠️ Transform: Senjata Manipulasi Fisik

Pada kode di atas, kita melihat properti transform. Ini adalah properti terbaik di alam semesta CSS karena perubahannya di-render langsung oleh kartu grafis komputermu (GPU-Accelerated) sehingga tidak akan terjadi patah-patah (lag) meskipun menganimasikan elemen raksasa!

Translate()

(Bergeser X, Y)

Scale()

(Membesar / Mengecil)

Rotate()

(Memutar Derajat)

Skew()

(Mendistorsi / Miring)

Arahkan mouse ke atas kotak-kotak di atas untuk melihat efek `transform` yang dipadukan dengan `transition`.

🎬 Animation & @keyframes (Sutradara Film)

Transition memiliki satu kelemahan besar: Ia butuh *Pemicu/Trigger* (misalnya harus di-hover mouse baru jalan, kalau mouse pergi dia balik lagi).

Jika kita ingin membuat objek bergerak sendiri berulang-ulang dari titik A ke B ke C lalu kembali ke A tanpa henti (seperti loading spinner), maka kita harus menggunakan kekuatan penuh @keyframes Animation.

Cara Kerjanya:

1. Pertama, kita harus "mensutradarai" timeline/skrip filmnya dengan membuat nama @keyframes NAMA_FILM.
2. Kita menentukan adegannya di detik 0% (awal), 50% (tengah), dan 100% (berakhir).
3. Terakhir, pasangkan nama film tersebut ke elemen HTML agar ia memainkannya berulang-ulang tanpa batas (infinite).

/* 1. SUTRADARA MEMBUAT SKRIP ADEGAN */
@keyframes detakJantung {
  0% { transform: scale(1); }
  50% { transform: scale(1.5); background: red; }
  100% { transform: scale(1); }
}

/* 2. BERI PERINTAH UNTUK MEMUTAR FILM */
.ikon-love {
  animation: detakJantung 1s infinite alternate;
  /* (film) | (waktu 1x putar) | (diulang tiada akhir) */
}
❤️

Bergerak Tanpa Henti
Bahkan jika kursor tidak digerakkan

🎥

📋 Ringkasan Sinematik

Transition: Membuat jembatan halus dari keadaan A menuju keadaan B (Tidak kaku). Wajib dipicu oleh sebuah event (misalnya :hover).
Transform: Mampu memindahkan X-Y (translate), mengubah skala fisik (scale), dan memutar objek (rotate) dengan mulus berkat bantuan GPU komputer, tidak memberatkan browser (JANGAN animasi margin/width/height karena berpotensi ngelag lambat).
@keyframes: Fitur mahadewa untuk membuat rentetan adegan (0% sampai 100%) yang dapat diputar secara otonom/otomatis berulang-ulang tanpa menekan atau men-hover apapun. Cocok untuk efek loading, lonceng bergetar, hingga slider gambar.