Menu

CSS Rotate: rotate(), Property rotate dan Efek Berputar

Putar elemen dengan transform: rotate(45deg) atau property rotate yang lebih baru. Pelajari satuan sudut (deg, turn, rad), memutar di sekitar sudut kotak dengan transform-origin, memutar teks dan ikon, loader yang berputar, dan rotasi 3D dengan rotateX dan rotateY.

Halaman ini dilengkapi editor yang bisa dijalankan. Edit, jalankan, dan lihat output-nya seketika.

Memutar sebuah elemen

Ada dua cara dengan hasil yang sama: fungsi rotate() di dalam transform, atau property rotate sendiri. Sudut positif memutar searah jarum jam:

Kotak biru dan hijau diputar persis sama, 45 derajat searah jarum jam di sekitar titik tengahnya. Kotak kuning punya sudut negatif, jadi kotak itu miring berlawanan arah jarum jam. Rotasi tidak pernah memindahkan layout: setiap kotak tetap memakai slot aslinya yang berukuran 90 kali 60, itulah sebabnya elemen yang diputar bisa menimpa elemen di sekitarnya.

Satuan sudut

SatuanSatu lingkaran penuh90 derajat
deg360deg90deg
turn1turn0.25turn
rad6.2832rad1.5708rad
grad400grad100grad

deg adalah pilihan yang paling umum, sedangkan turn enak dibaca untuk efek berputar (rotate: 1turn). Sudut di atas 360 diperbolehkan dan berpengaruh di animasi: rotate(720deg) di sebuah keyframe berputar dua kali. Selalu tulis satuannya: rotate(45) tidak valid dan diabaikan.

Geser slider untuk melihat sebuah sudut dalam setiap satuan:

Memutar di sekitar sudut kotak: transform-origin

Secara default, elemen berputar di sekitar titik tengahnya. transform-origin memindahkan titik porosnya. Jarum jam berputar pada ujungnya, bukan di bagian tengahnya:

Ujung bawah jarum berada di pin kuning di tengah muka jam, dan rotate: 120deg memutarnya ke arah jam empat. Hapus baris transform-origin, maka jarum itu berputar di sekitar bagian tengahnya sendiri, lepas dari pin.

Memutar teks dan label vertikal

Kemiringan kecil dengan rotate tidak masalah untuk badge atau stiker. Untuk label yang benar-benar vertikal, writing-mode lebih baik, karena ikut mengubah layout: elemennya menjadi tinggi dan sempit, bukan menimpa elemen di sebelahnya.

Hasil pembacaannya menampilkan ukuran layout setiap label. Label yang diputar tetap memakai kotak aslinya yang lebar dan pendek: label itu meninggalkan celah kosong di sebelahnya dan mencuat ke atas dan ke bawah barisnya, masuk ke apa pun yang ada di sana. Label dengan writing-mode memakai kotak yang tinggi dan sempit. Menambahkan rotate: 180deg membuatnya terbaca dari bawah ke atas, yang merupakan arah umum untuk label vertikal.

Memutar ikon saat diklik atau di-hover

Memutar panah 180 derajat adalah cara standar untuk menunjukkan bahwa sebuah bagian sedang terbuka. Gabungkan rotate dengan transisi:

Chevron-nya adalah persegi dengan dua border, diputar 45 derajat supaya menunjuk ke bawah. Saat tombolnya terbuka, chevron berputar ke 225 derajat, menunjuk ke atas, dan transisinya menganimasikan setengah putaran itu. Atribut aria-expanded yang mengatur style-nya, jadi state visual dan state yang diumumkan screen reader tidak pernah bisa berbeda.

Loader yang berputar

Efek berputar adalah rotasi dari 0 sampai 360 derajat, diulang dengan timing linear supaya kecepatannya tidak pernah berubah:

Dengan hanya keyframe to, animasinya dimulai dari rotasi elemen itu sendiri (tidak ada) dan berakhir di 360deg, dan infinite mengulanginya tanpa lompatan karena 360deg terlihat sama dengan 0. Untuk orang yang meminta sistemnya mengurangi animasi, spinner-nya berputar tiga kali lebih lambat. Penjelasan lebih lanjut tentang keyframe ada di halaman animation.

Rotasi 3D: rotateX, rotateY

rotateX() memiringkan elemen ke belakang di sekitar sumbu horizontal, dan rotateY() memutarnya di sekitar sumbu vertikal, seperti pintu. Tanpa perspektif, hasilnya hanya terlihat gepeng. perspective pada elemen induk menambahkan kesan kedalaman:

.scene { perspective: 600px; }
.card  { transform: rotateY(35deg); }
.flip  { transform: rotateY(180deg); backface-visibility: hidden; } /* card flip */

Untuk mencerminkan elemen, bukan memutarnya, pakai scale: -1 1 (membalik secara horizontal). Rotasi 180 derajat membuatnya terbalik atas bawah, dan itu tidak sama.

Kesalahan yang sering terjadi

  • Memutar <span> atau <a> yang tetap diam. Elemen inline biasa mengabaikan transform. Tambahkan display: inline-block.
  • Rotasi yang hilang saat hover. Aturan hover dengan transform: scale(1.1) menggantikan transform: rotate(...). Pakai property rotate dan scale yang terpisah, atau tulis kedua fungsinya.
  • Mengira layout akan menyediakan ruang. Gambar yang diputar tetap memakai kotaknya sebelum diputar dan menimpa elemen di sekitarnya. Beri container-nya ukuran setelah diputar, atau pakai writing-mode untuk teks.
  • Spinner dengan ease. Timing default-nya mempercepat lalu memperlambat setiap putaran. Pakai linear.
  • Memutar di titik yang salah. Atur transform-origin sebelum menyetel sudutnya.

Pertanyaan yang sering diajukan

Bagaimana cara memutar elemen di CSS?

Pakai transform: rotate(45deg); atau property terpisah rotate: 45deg;. Sudut positif memutar searah jarum jam dan sudut negatif berlawanan arah jarum jam, di sekitar titik tengah elemen kecuali kamu mengubah transform-origin.

Apa perbedaan transform: rotate() dan property rotate?

Hasil gambarnya sama. Property rotate tidak bergantung pada transform, jadi aturan hover bisa mengubah scale atau translate tanpa menghapus rotasinya, dan masing-masing bisa punya transisi sendiri. Kalau dipakai bersama, ketiganya bekerja seperti transform: translate() rotate() scale(), dengan urutan deklarasi apa pun.

Bagaimana cara memutar gambar 90 derajat di CSS?

Tambahkan transform: rotate(90deg); (atau rotate: 90deg;) pada img. Gambarnya tetap memakai ruang aslinya di layout, jadi gambar tegak yang diputar menjadi mendatar bisa menimpa elemen di sekitarnya. Beri container-nya ruang seukuran gambar setelah diputar.

Bagaimana cara membuat elemen berputar di CSS?

Buat @keyframes spin { to { rotate: 360deg; } } lalu terapkan animation: spin 1s linear infinite;. Pakai linear supaya kecepatannya tetap, lalu perlambat atau hentikan animasinya di bawah prefers-reduced-motion: reduce.

Bagaimana cara memutar teks menjadi vertikal di CSS?

Untuk label vertikal, writing-mode: vertical-rl biasanya lebih baik daripada rotate(90deg), karena ikut mengubah layout: elemennya memakan ruang vertikal, bukan menimpa elemen lain. Pakai rotate untuk kemiringan kecil sebagai hiasan.

Ilustrasi bahasa pemrograman di Coddy

Belajar coding dengan Coddy

Mulai