Về cơ bản, bạn đang cố gắng tìm ra cách đặt đối tượng trong không gian 3D, vì vậy nó xếp hàng với chế độ xem 2D. Đó luôn luôn là một điều khó khăn.
Tôi không biết toán học là gì, và hầu hết có thể là không. Đây không phải là một vấn đề phổ biến. Nhưng đây là cách tôi sẽ tìm hiểu về nó.
Biến duy nhất ở đây là width
. Và 2 giá trị cần thay đổi dựa trên chiều rộng là -webkit-perspective
trên vùng chứa và -webkit-transform
trên phần tử bên trong. Vì vậy, tôi sẽ tự chỉnh sửa các giá trị cho một vài độ rộng khác nhau và ghi lại các giá trị 3D mà bạn phải nhập để làm cho mọi thứ trông đúng. (Tôi muốn sử dụng trình kiểm tra web để chỉnh sửa các giá trị theo thời gian thực để bạn nhận được phản hồi ngay lập tức)
Một trong số đó có một vài điểm dữ liệu, vẽ chúng ra trên biểu đồ và sau đó cố gắng tìm ra cách chúng thay đổi. Tôi có linh cảm, đó là đường cong parabolic, nhưng nó có thể nhưng hyperbol hoặc hình sin quá, toán 3D của tôi không đủ tốt để biết chắc chắn.
Sau đó, bạn có thể thử tìm ra phương trình khi bạn nhập chiều rộng bạn đã lấy mẫu, bạn lấy lại giá trị 3D thủ công bạn đã đặt trước đó. Sau đó, sử dụng JS để đọc chiều rộng của vùng chứa và đặt các giá trị CSS để làm cho nó trông đúng.
tôi đã làm điều đó với 3 độ rộng 300, 450, 600:
http://jsfiddle.net/24qrQ/3/
Một số xu hướng rất rõ ràng. Khi chiều rộng tăng, phối cảnh tăng lên khi tỷ lệ tăng lại và xoay vòng giảm với tốc độ tăng.
Tìm ra công thức chính xác, giờ đây tùy thuộc vào bạn.
Như một sự thay thế đơn giản hơn, nếu tìm ra một công thức trở nên quá khó khăn, bạn có thể bằng tay cha phó một số ít các chiều rộng và giá trị 3D trông đẹp và lưu trữ chúng trong JS ở đâu đó. Sau đó, bạn chỉ có thể nội suy tuyến tính giữa chúng. Nó sẽ không chính xác, nhưng nó có thể đủ gần.
Nó cũng sẽ ít thú vị hơn!
Wow trông koool :) –