Dua transisi dengan durasi sama bisa terasa sangat berbeda: satu terasa hidup, satu lagi terasa datar. Pembedanya adalah ritme — bagaimana kecepatan dibagikan sepanjang durasi. transition-timing-function mengatur pembagian itu lewat kurva percepatan, dan pilihan kurvanya termasuk keputusan animasi yang paling terasa oleh pengguna.
Lima Kata Kunci Bawaan #
CSS menyediakan lima kata kunci yang menutup sebagian besar kebutuhan:
| Nilai | Karakter gerakan | Cocok untuk |
|---|---|---|
ease (default) | mulai cepat, melambat mendekati akhir | pilihan serba bisa untuk perubahan kecil |
linear | kecepatan tetap dari awal ke akhir | gerakan beruntun seperti putaran |
ease-in | mulai lambat, makin cepat | elemen yang keluar dari layar |
ease-out | mulai cepat, melambat di akhir | elemen yang masuk ke layar |
ease-in-out | lambat di kedua ujung, cepat di tengah | perpindahan bolak-balik seperti drawer |
.panel-geser {
transition-property: transform;
transition-duration: 0.4s;
transition-timing-function: ease-in-out;
}Empat bola berikut bergerak dengan jarak dan durasi yang sama persis — yang membedakan hanya transition-timing-function-nya (demo memakai translateX untuk menggeser bola; transform dibahas tuntas pada chapter-chapter berikutnya).
Saat kursor meninggalkan baris, bola berjalan pulang dengan kurva yang sama karena transition terpasang pada keadaan dasar; jika ingin perjalanan pulangnya berbeda, pasang timing function lain pada aturan keadaan berubahnya.
Cara mudah membayangkannya adalah mobil. ease-in adalah pengemudi yang perlahan menginjak gas; ease-out adalah pengereman mulus mendekati garis akhir; linear adalah kereta yang kecepatannya terkunci. ease dan ease-in-out menggabungkan keduanya dengan pembagian yang berbeda.
cubic-bezier: Kurva Buatan Sendiri #
Kelima kata kunci di atas sebenarnya adalah nilai cubic-bezier bawaan. Fungsi cubic-bezier(x1, y1, x2, y2) mendefinisikan kurva lewat dua titik kontrol, dan tabel berikut menunjukkan padanannya:
| Kata kunci | Setara dengan |
|---|---|
linear | cubic-bezier(0, 0, 1, 1) |
ease | cubic-bezier(0.25, 0.1, 0.25, 1) |
ease-in | cubic-bezier(0.42, 0, 1, 1) |
ease-out | cubic-bezier(0, 0, 0.58, 1) |
ease-in-out | cubic-bezier(0.42, 0, 0.58, 1) |
Empat angka itu adalah koordinat dua titik kontrol pada grafik waktu (sumbu x) melawan kemajuan animasi (sumbu y). Aturannya: nilai x harus berada di antara 0 dan 1, sedangkan nilai y bebas. Kebebasan nilai y inilah sumber efek yang menarik: nilai y di atas 1 membuat animasi melewati titik akhir sejenak lalu kembali, seperti pegas yang tertarik lalu menenangkan diri — kesan yang sering disebut springy.
.tombol-pegas {
transition-property: transform;
transition-duration: 0.4s;
transition-timing-function: cubic-bezier(0.34, 1.56, 0.64, 1);
}Arahkan kursor ke tombol berikut: kurva pegas membawanya melewati titik akhir sejenak sebelum menenangkan diri — gerakan kecil yang membuat antarmuka terasa punya karakter.
steps: Perpindahan Bertahap #
Tidak semua gerakan harus mulus. Fungsi steps(n) membagi durasi menjadi n lompatan tanpa jarak halus di antaranya:
.indikator-langkah {
transition-property: transform;
transition-duration: 1s;
transition-timing-function: steps(4);
}Arahkan kursor ke jalur berikut: penandanya berpindah dalam empat lompatan, bukan satu garis mulus.
Pola ini jarang dibutuhkan pada antarmuka biasa; tempatnya yang paling wajar adalah efek seperti mesin tik atau indikator bertahap.
Memilih Kurva untuk Situasi yang Tepat #
| Situasi | Rekomendasi | Alasan |
|---|---|---|
| elemen masuk ke layar | ease-out | menyambut dengan cepat, lalu menenangkan diri di posisi akhir |
| elemen keluar dari layar | ease-in | memulai dengan tenang, lalu mempercepat kepergiannya |
| panel dibuka dan ditutup | ease-in-out | kedua ujung perjalanan sama halusnya |
| perubahan warna kecil | ease | cukup untuk hampir semua kasus |
| putaran terus-menerus | linear | tanpa perlambatan, putaran tidak tersendat |
Kesalahan Umum #
| Kesalahan | Akibatnya | Perbaikan |
|---|---|---|
memakai linear untuk semua perubahan | gerakan terasa mekanis karena tidak ada percepatan maupun perlambatan | pakai ease sebagai awal, lalu sesuaikan per situasi |
nilai x di luar 0 sampai 1 pada cubic-bezier | seluruh deklarasi timing function dianggap tidak valid dan diabaikan | jaga x1 dan x2 di rentang 0-1; hanya y yang bebas |
steps() dengan angka sangat besar | lompatannya terlalu rapat sehingga tidak terlihat sebagai tahapan | pakai steps() hanya bila lompatan memang ingin terlihat |
Ringkasan #
transition-timing-function mengatur ritme di dalam durasi: lima kata kunci menutup kebutuhan harian, cubic-bezier membuka kurva kustom termasuk efek pegas, dan steps membagi perubahan menjadi lompatan. Kurva mengatur bagaimana gerakan berjalan, tetapi belum mengatur kapan gerakan dimulai. Chapter berikutnya menambahkan potongan itu lewat transition-delay.