K

Command Palette

Search for a command to run...

Daftar

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:

  1. 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 */
    }
  2. 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. Kalau sy 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 */
    }
  3. rotate(sudut): Memutar elemen searah jarum jam.

    • sudut: Ditulis pake unit deg (derajat), rad (radian), grad (gradian), atau turn (putaran penuh). 45deg, -90deg, 0.5turn.
    css
    .putar-45-derajat {
        transform: rotate(45deg);
    }
    .putar-setengah-lingkaran {
        transform: rotate(0.5turn); /* Sama kayak 180deg */
    }
  4. 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);
    }
  5. 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.

css
.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 dan y-offset bisa pake keyword (left, center, right buat X; top, center, bottom buat Y), persentase, atau panjang.
  • Defaultnya 50% 50% atau center center.

Contoh Penggunaan transform-origin:

css
.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) atau translateZ(tz): Geser di sumbu Z (maju/mundur).
    • scale3d(sx, sy, sz) atau scaleZ(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 kayak rotate() 2D).
    • matrix3d(...): Versi 3D dari matrix().
  • 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.

css
.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 dan animation lebih lanjut). transform itu di-handle sama GPU (kartu grafis) jadi animasinya cenderung lebih smooth daripada ngubah properti layout kayak margin atau left/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...