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òn | 90 độ |
|---|---|---|
deg | 360deg | 90deg |
turn | 1turn | 0.25turn |
rad | 6.2832rad | 1.5708rad |
grad | 400grad | 100grad |
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êmdisplay: 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ínhrotatevà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-modecho 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ùnglinear. - Xoay quanh sai điểm. Hãy đặt
transform-origintrướ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í.