Câu hỏi ban đầu của tôi cho điều này là làm thế nào để vừa có một phần tử của một khía cạnh cố định, nhưng lại vừa khớp chính xác phần tử đó trong một vùng chứa được chỉ định, điều này khiến nó hơi rắc rối. Nếu bạn chỉ muốn một phần tử riêng lẻ duy trì tỷ lệ khung hình của nó thì sẽ dễ dàng hơn rất nhiều.
Phương pháp tốt nhất mà tôi đã thử là đưa ra chiều cao phần tử bằng không và sau đó sử dụng phần trăm padding-bottom để tạo chiều cao cho phần tử. Phần trăm đệm luôn tỷ lệ với chiều rộng của một phần tử chứ không phải chiều cao của nó, ngay cả khi phần đệm trên cùng hay dưới cùng của nó.
Thuộc tính đệm W3C
Vì vậy, bằng cách sử dụng bạn có thể cung cấp cho một phần tử chiều rộng phần trăm để nằm trong một vùng chứa, sau đó đệm để chỉ định tỷ lệ khung hình hoặc nói cách khác, mối quan hệ giữa chiều rộng và chiều cao của nó.
.object {
width: 80%; /* whatever width here, can be fixed no of pixels etc. */
height: 0px;
padding-bottom: 56.25%;
}
.object .content {
position: absolute;
top: 0px;
left: 0px;
height: 100%;
width: 100%;
box-sizing: border-box;
-moz-box-sizing: border-box;
padding: 40px;
}
Vì vậy, trong ví dụ trên, đối tượng chiếm 80% chiều rộng vùng chứa, và sau đó chiều cao của nó là 56,25% giá trị đó. Nếu chiều rộng của nó là 160px thì phần đệm dưới cùng và do đó chiều cao sẽ là 90px - tỷ lệ 16: 9.
Vấn đề nhỏ ở đây, có thể không phải là vấn đề đối với bạn, là không có không gian tự nhiên bên trong đối tượng mới của bạn. Ví dụ, nếu bạn cần đưa một số văn bản vào và văn bản đó cần nhận các giá trị đệm của riêng nó, bạn cần thêm một vùng chứa bên trong và chỉ định các thuộc tính trong đó.
Ngoài ra, các đơn vị vw và vh không được hỗ trợ trên một số trình duyệt cũ hơn, vì vậy câu trả lời được chấp nhận cho câu hỏi của tôi có thể không thực hiện được với bạn và bạn có thể phải sử dụng thứ gì đó lo-fi hơn.
position: relative (default) height: 0 padding-<top/bottom>: H/W*100%