Menu

CSS rotate: hàm rotate(), thuộc tính rotate và quay tròn

Xoay một phần tử bằng transform: rotate(45deg) hoặc thuộc tính rotate mới hơn. Tìm hiểu các đơn vị góc (deg, turn, rad), xoay quanh một góc với transform-origin, xoay chữ và icon, biểu tượng loading quay tròn, và xoay 3D với rotateX và rotateY.

Trang này có trình soạn thảo chạy trực tiếp. Sửa, chạy và xem đầu ra ngay lập tức.

Xoay một phần tử

Hai cách, cùng một kết quả: hàm rotate() bên trong transform, hoặc riêng thuộc tính rotate. Góc dương xoay theo chiều kim đồng hồ:

Hộp xanh dương và hộp xanh lá được xoay giống hệt nhau, 45 độ theo chiều kim đồng hồ quanh tâm của chúng. Hộp màu hổ phách có góc âm, nên nó nghiêng ngược chiều kim đồng hồ. Phép xoay không bao giờ dịch chuyển bố cục: mỗi hộp vẫn chiếm ô 90 x 60 ban đầu, vì vậy phần tử bị xoay có thể đè lên các phần tử bên cạnh.

Đơn vị góc

Đơn vịMột vòng tròn90 độ
deg360deg90deg
turn1turn0.25turn
rad6.2832rad1.5708rad
grad400grad100grad

deg là lựa chọn thông dụng; turn dễ đọc khi quay tròn (rotate: 1turn). Góc lớn hơn 360 vẫn hợp lệ và có ý nghĩa trong animation: rotate(720deg) trong một keyframe sẽ quay hai vòng. Luôn viết đơn vị: rotate(45) không hợp lệ và bị bỏ qua.

Kéo thanh trượt để xem một góc ở từng đơn vị:

Xoay quanh một góc: transform-origin

Mặc định phần tử xoay quanh tâm của nó. transform-origin dời trục xoay đi. Kim đồng hồ xoay quanh đầu kim chứ không quanh điểm giữa:

Đầu dưới của kim nằm trên chốt màu hổ phách ở giữa mặt đồng hồ, và rotate: 120deg xoay kim chỉ đến 4 giờ. Bỏ dòng transform-origin thì kim sẽ xoay quanh điểm giữa của chính nó, lệch ra khỏi chốt.

Xoay chữ và nhãn dọc

Một độ nghiêng nhỏ bằng rotate là ổn cho nhãn hay sticker. Với một nhãn dọc thật sự, writing-mode tốt hơn, vì nó thay đổi bố cục: phần tử trở nên cao và hẹp thay vì đè lên phần bên cạnh.

Phần kết quả cho thấy kích thước bố cục của từng nhãn. Nhãn bị xoay vẫn chiếm hộp rộng và thấp ban đầu: nó để lại khoảng trống bên cạnh và chòi ra phía trên và phía dưới hàng của nó, đè vào bất cứ thứ gì ở đó. Nhãn dùng writing-mode chiếm một hộp cao và hẹp. Thêm rotate: 180deg để nhãn đọc từ dưới lên trên, đó là hướng thường dùng cho nhãn dọc.

Xoay icon khi bấm hoặc rê chuột

Xoay mũi tên 180 độ là cách chuẩn để cho biết một phần đang mở. Kết hợp rotate với transition:

Hình chữ V là một hình vuông có hai cạnh viền, xoay 45 độ để chỉ xuống. Khi nút được mở rộng, nó xoay đến 225 độ, chỉ lên trên, và transition tạo animation cho nửa vòng quay đó. Thuộc tính aria-expanded điều khiển style, nên trạng thái hiển thị và trạng thái mà trình đọc màn hình thông báo không bao giờ lệch nhau.

Biểu tượng loading quay tròn

Quay tròn là một phép xoay từ 0 đến 360 độ, lặp lại với timing linear để tốc độ không bao giờ thay đổi:

Chỉ với một keyframe to, animation bắt đầu từ góc xoay sẵn có của phần tử (không xoay) và kết thúc ở 360deg, còn infinite lặp lại nó mà không bị giật vì 360deg trông giống hệt 0. Với những người đã yêu cầu hệ thống giảm chuyển động, biểu tượng quay chậm hơn ba lần. Xem thêm về keyframe trong trang animation.

Xoay 3D: rotateX, rotateY

rotateX() lật phần tử ra sau quanh trục ngang, còn rotateY() xoay nó quanh trục dọc, giống như một cánh cửa. Không có phối cảnh thì chúng chỉ trông như bị ép dẹt; perspective trên phần tử cha tạo thêm chiều sâu:

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

Để lật gương một phần tử thay vì xoay nó, hãy dùng scale: -1 1 (lật ngang). Xoay 180 độ sẽ làm phần tử lộn ngược, và đó không phải là cùng một việc.

Lỗi thường gặp

  • Xoay một <span> hoặc <a> mà nó vẫn đứng yên. Phần tử inline thuần túy bỏ qua transform. Hãy thêm display: inline-block.
  • Góc xoay biến mất khi hover. Một quy tắc hover có transform: scale(1.1) sẽ thay thế transform: rotate(...). Hãy dùng riêng các thuộc tính rotate và scale, hoặc liệt kê cả hai hàm.
  • Mong bố cục tự chừa chỗ. Ảnh bị xoay vẫn giữ hộp chưa xoay và đè lên các phần tử bên cạnh. Hãy cho phần tử chứa kích thước sau khi xoay, hoặc dùng writing-mode cho chữ.
  • Biểu tượng quay dùng ease. Timing mặc định tăng tốc rồi giảm tốc ở mỗi vòng. Hãy dùng linear.
  • Xoay quanh sai điểm. Hãy đặt transform-origin trước khi chỉnh góc.

Câu hỏi thường gặp

Làm sao xoay một phần tử trong CSS?

Dùng transform: rotate(45deg); hoặc thuộc tính riêng rotate: 45deg;. Góc dương xoay theo chiều kim đồng hồ và góc âm xoay ngược chiều kim đồng hồ, quanh tâm của phần tử trừ khi bạn đổi transform-origin.

transform: rotate() và thuộc tính rotate khác nhau thế nào?

Chúng vẽ ra cùng một kết quả. Thuộc tính rotate độc lập với transform, nên một quy tắc hover có thể đổi scale hoặc translate mà không làm mất góc xoay, và mỗi thuộc tính có thể có transition riêng. Khi dùng chung, chúng hoạt động như transform: translate() rotate() scale(), bất kể bạn khai báo theo thứ tự nào.

Làm sao xoay ảnh 90 độ trong CSS?

Thêm transform: rotate(90deg); (hoặc rotate: 90deg;) cho img. Ảnh vẫn giữ chỗ ban đầu trong bố cục, nên một ảnh dọc xoay thành ngang có thể đè lên các phần tử bên cạnh; hãy cho phần tử chứa đủ chỗ cho kích thước sau khi xoay.

Làm sao cho một phần tử quay tròn trong CSS?

Khai báo @keyframes spin { to { rotate: 360deg; } } và áp dụng animation: spin 1s linear infinite;. Dùng linear để tốc độ không đổi, và làm chậm hoặc dừng nó khi có prefers-reduced-motion: reduce.

Làm sao xoay chữ thành dọc trong CSS?

Với nhãn dọc, writing-mode: vertical-rl thường tốt hơn rotate(90deg), vì nó thay đổi cả bố cục: phần tử chiếm chỗ theo chiều dọc thay vì đè lên phần khác. Hãy dùng rotate cho những độ nghiêng nhỏ để trang trí.

Hình minh họa các ngôn ngữ lập trình của Coddy

Học lập trình cùng Coddy

Bắt đầu