Nó có vẻ như các biến đổi được áp dụng sau khi mọi thứ khác, vì vậy chiều rộng và chiều cao không được cập nhật. Giải pháp tốt nhất mà tôi có thể nghĩ đến là tự tính toán các thứ nguyên đã xoay, sử dụng ma trận xoay:
[ cos X -sin X ] [ width ]
[ sin X cos X ] [ height ]
Thật đơn giản để dịch nó thành JavaScript. Bạn cần phải xoay tất cả bốn góc (0,0) (w, 0) (0, h) (w, h) và sau đó kích thước xoay là chiều rộng và chiều cao của hình chữ nhật giới hạn xoay.
var angle = angle_in_degrees * Math.PI/180,
sin = Math.sin(angle),
cos = Math.cos(angle);
// (0,0) stays as (0, 0)
// (w,0) rotation
var x1 = cos * width,
y1 = sin * width;
// (0,h) rotation
var x2 = -sin * height,
y2 = cos * height;
// (w,h) rotation
var x3 = cos * width - sin * height,
y3 = sin * width + cos * height;
var minX = Math.min(0, x1, x2, x3),
maxX = Math.max(0, x1, x2, x3),
minY = Math.min(0, y1, y2, y3),
maxY = Math.max(0, y1, y2, y3);
var rotatedWidth = maxX - minX,
rotatedHeight = maxY - minY;
Và đó là lý do tại sao, bất cứ khi nào bạn thấy văn bản xoay trên web, nó là một hình ảnh .. – T4NK3R
tôi không thể đồng ý hơn với @ T4NK3R, và điều này mặc dù tôi đã nghiên cứu ma trận chuyển đến kiệt sức trong trường đại học. Không phải là ở trên là "cứng". Nhưng tại sao!? Điều này có nên được xử lý rõ ràng bởi biến đổi ban đầu không? – seebiscuit