Transformasi CSS
Bikin elemenmu bergerak, berputar, berubah ukuran, atau miring! Pelajari properti `transform` CSS dan fungsi-fungsinya seperti `translate`, `scale`, `rotate`, dan `skew`.
Jurus Kungfu Elemen: Mengubah Bentuk & Posisi Pake Transformasi CSS!
Udah bisa ngatur tampilan dasar elemen? Sekarang, gimana kalau kita mau bikin elemen itu bergerak sedikit, berputar, ukurannya berubah, atau bahkan miring tanpa harus ngubah layout elemen lain di sekitarnya? Nah, di sinilah properti transform
di CSS beraksi!
Properti transform
ngebolehin kamu buat nerapin transformasi geometris 2D atau 3D ke sebuah elemen. Yang keren, transformasi ini gak ngaruh ke alur normal dokumen (document flow). Artinya, elemen lain gak bakal geser-geser atau keganggu posisinya cuma gara-gara satu elemen di-transform. Elemen yang di-transform itu kayak "melayang" sedikit dari posisinya semula dan ngubah dirinya sendiri.
Properti transform
dan Fungsi-Fungsi Ajaibnya
Properti utama yang kita pake adalah transform
. Nilainya adalah satu atau lebih fungsi transformasi yang mau kita terapin.
Fungsi Transformasi 2D yang Umum:
-
translate(tx, ty)
: Menggeser elemen secara horizontal (tx
) dan vertikal (ty
) dari posisi aslinya.tx
: Pergeseran sumbu X. Nilai positif geser ke kanan, negatif ke kiri.ty
: Pergeseran sumbu Y. Nilai positif geser ke bawah, negatif ke atas.- Kalau cuma mau geser satu sumbu:
translateX(tx)
: Geser horizontal aja.translateY(ty)
: Geser vertikal aja.
- Unitnya bisa
px
,%
(persen dari ukuran elemen itu sendiri),em
, dll.
css .geser-kanan-bawah { transform: translate(50px, 20px); /* Geser 50px ke kanan, 20px ke bawah */ } .geser-atas { transform: translateY(-30px); /* Geser 30px ke atas */ }
-
scale(sx, sy)
: Mengubah ukuran (skala) elemen.sx
: Faktor skala horizontal.1
itu ukuran normal,2
itu 2x lebih lebar,0.5
itu setengah lebar.sy
: Faktor skala vertikal. Kalausy
gak disebutin (misal,scale(1.5)
), skala vertikalnya bakal sama kayak horizontal.- Kalau cuma mau skala satu sumbu:
scaleX(sx)
: Skala horizontal aja.scaleY(sy)
: Skala vertikal aja.
- Nilai negatif bakal nge-flip elemen (kayak cermin).
css .perbesar-dua-kali { transform: scale(2); /* Jadi 2x lebih besar di kedua sumbu */ } .pipihkan-vertikal { transform: scaleY(0.5); /* Tingginya jadi setengah */ } .terbalik-horizontal { transform: scaleX(-1); /* Jadi kayak dicerminin horizontal */ }
-
rotate(sudut)
: Memutar elemen searah jarum jam.sudut
: Ditulis pake unitdeg
(derajat),rad
(radian),grad
(gradian), atauturn
(putaran penuh).45deg
,-90deg
,0.5turn
.
css .putar-45-derajat { transform: rotate(45deg); } .putar-setengah-lingkaran { transform: rotate(0.5turn); /* Sama kayak 180deg */ }
-
skew(sx-sudut, sy-sudut)
: Memiringkan elemen.sx-sudut
: Sudut kemiringan pada sumbu X.sy-sudut
: Sudut kemiringan pada sumbu Y.- Kalau cuma mau miringin satu sumbu:
skewX(sudut)
skewY(sudut)
- Unit sudut sama kayak
rotate
.
css .miring-horizontal { transform: skewX(20deg); } .miring-keduanya { transform: skew(10deg, -5deg); }
-
matrix(a, b, c, d, tx, ty)
: Fungsi transformasi 2D yang paling powerful. Dia bisa ngelakuin semua transformasi di atas (translate, scale, rotate, skew) atau kombinasinya pake enam angka yang ngewakilin matriks transformasi. Ini agak advance, biasanya gak sering dipake langsung kecuali kamu ngerti matematika matriks atau pake tools.
Menggabungkan Beberapa Fungsi Transformasi:
Kamu bisa nerapin beberapa fungsi transformasi sekaligus ke satu elemen dengan nulisnya berurutan dipisah spasi di dalem properti transform
. Urutan penulisan itu penting! Transformasi bakal diterapin dari kiri ke kanan.
.kombo-transform {
transform: translateX(50px) rotate(30deg) scale(1.2);
/* Geser dulu 50px ke kanan, terus putar 30 derajat, terus perbesar 1.2x */
}
Hasil rotate(30deg) translateX(50px)
bakal beda sama translateX(50px) rotate(30deg)
.
Properti transform-origin
: Nentuin Titik Pusat Transformasi
Secara default, semua transformasi (kayak rotate
dan scale
) itu dilakuin berpusat di tengah-tengah elemen (50% 50%
atau center center
). Tapi, kamu bisa ngubah titik pusat ini pake properti transform-origin
.
- Sintaks:
transform-origin: x-offset y-offset z-offset;
(z-offset buat 3D) - Nilai
x-offset
dany-offset
bisa pake keyword (left
,center
,right
buat X;top
,center
,bottom
buat Y), persentase, atau panjang. - Defaultnya
50% 50%
ataucenter center
.
Contoh Penggunaan transform-origin
:
.putar-dari-pojok-kiri-atas {
transform: rotate(45deg);
transform-origin: top left; /* atau 0% 0% */
}
.skala-dari-tengah-bawah {
transform: scale(1.5);
transform-origin: bottom center; /* atau 50% 100% */
}
Dengan transform-origin
, kamu bisa bikin efek putaran atau skala yang beda-beda, misalnya kayak jarum jam yang muter dari pangkalnya.
Pengenalan Singkat ke Transformasi 3D
Selain transformasi 2D, CSS juga ngedukung transformasi 3D buat ngasih efek kedalaman. Ini sedikit lebih kompleks.
-
Fungsi Transformasi 3D Umum:
translate3d(tx, ty, tz)
atautranslateZ(tz)
: Geser di sumbu Z (maju/mundur).scale3d(sx, sy, sz)
atauscaleZ(sz)
: Skala di sumbu Z.rotate3d(x, y, z, sudut)
: Putar elemen di sekitar vektor [x,y,z].rotateX(sudut)
,rotateY(sudut)
,rotateZ(sudut)
(sama kayakrotate()
2D).matrix3d(...)
: Versi 3D darimatrix()
.
-
Properti Penting buat Konteks 3D:
perspective
: Diterapin ke elemen parent dari elemen yang mau di-transform 3D. Ini nentuin seberapa "jauh" jarak pandang ke objek 3D, ngasih ilusi kedalaman. Nilainya biasanya pake pixel (misal,perspective: 1000px;
). Makin kecil nilainya, efek perspektifnya makin ekstrem.perspective-origin
: Nentuin titik hilang (vanishing point) dari perspektif, juga diterapin ke parent.transform-style: preserve-3d;
: Diterapin ke elemen parent kalau kamu mau anak-anaknya juga bisa ditransformasi dalam ruang 3D yang sama. Tanpa ini, anak-anaknya bakal "gepeng" (flattened) ke bidang parent-nya.backface-visibility: visible | hidden;
: Nentuin apakah sisi belakang elemen yang di-transform 3D itu keliatan atau enggak pas dia muter ngebelakangin kita.
Contoh Sederhana Efek 3D (Kartu Flip): Ini contoh konseptual, butuh HTML dan CSS yang lebih lengkap buat beneran jalan.
.kartu-container { /* Parent */
perspective: 1000px;
}
.kartu { /* Child yang mau di-flip */
width: 200px;
height: 300px;
transform-style: preserve-3d;
transition: transform 0.6s; /* Biar flip-nya animasi */
}
.kartu.terbalik {
transform: rotateY(180deg);
}
.kartu .sisi-depan, .kartu .sisi-belakang {
position: absolute; /* Biar numpuk */
width: 100%;
height: 100%;
backface-visibility: hidden; /* Sembunyiin sisi belakang pas ngadep depan, dan sebaliknya */
}
.kartu .sisi-belakang {
transform: rotateY(180deg); /* Biar teksnya gak kebalik pas kartu di-flip */
}
Transformasi 3D ini bisa ngebuka banyak banget kemungkinan kreatif, tapi juga butuh pemahaman yang lebih dalem soal ruang dan perspektif.
Kapan Pake transform
?
- Buat animasi dan transisi visual yang halus (nanti kita bahas
transition
dananimation
lebih lanjut).transform
itu di-handle sama GPU (kartu grafis) jadi animasinya cenderung lebih smooth daripada ngubah properti layout kayakmargin
atauleft
/top
. - Buat efek-efek UI kayak hover (misal, tombol agak geser atau ngegedein pas di-hover).
- Buat ngubah tampilan visual elemen tanpa ngerusak layout halaman.
Properti transform
ini bener-bener nambahin dimensi baru ke styling CSS-mu! Dari pergeseran simpel, putaran, skala, sampe efek 3D yang kompleks, semuanya bisa kamu coba. Jangan takut buat eksperimen dengan berbagai fungsi dan nilai. Ini salah satu area di CSS yang paling seru buat dieksplorasi secara visual!
Selanjutnya, kita bakal balik lagi ke dasar-dasar layouting, dimulai dari properti position
.
Kuis Transformasi CSS
Pertanyaan 1 dari 5
Fungsi transformasi CSS `translate(20px, -10px)` akan membuat elemen...