Tôi thấy giải pháp cho chiều cao tùy thuộc vào chiều rộng: css height same as width. Hoặc tại đây: https://stackoverflow.com/a/6615994/2256981. Nhưng câu hỏi của tôi là ngược lại.Đặt chiều rộng theo chiều cao
yếu tố của tôi:
<body>
<div id="square"></div>
</body>
Phong cách cho nó:
body, html {
margin: 0;
height: 100%;
min-height: 300px;
position: relative;
}
div#square { /* My square. */
height: 75%; /* It's height depends on ancestor's height. */
width: 75vh; /* If supported, preliminarily sets it's width. */
position: absolute; /* Centers it. */
left: 50%; top: 50%; transform: translate(-50%, -50%);
background-color: darkorange; /* Makes it visible. */
}
Script, mà giữ nó vuông:
window.onload = window.onresize = function (event) {
var mySquare = document.getElementById("square");
mySquare.style.width = mySquare.offsetHeight + 'px';
};
mã hoàn chỉnh ở đây: http://jsfiddle.net/je1h/hxkgfr9g/
Câu hỏi đặt ra là làm điều tương tự trong CSS thuần túy. Không có kịch bản.
Tôi không biết bạn có thể làm điều này trong css hay không. Bạn có thể thử https://css-tricks.com/snippets/css/a-guide-to-flexbox/, nhưng tôi không biết điều đó có giúp ích cho bạn hay không. – xdhmoore
Điều này có làm những gì bạn đang tìm kiếm không? http://stackoverflow.com/questions/12899031/css-squares-on-resize – xdhmoore
Tôi cũng nghĩ rằng nó không thể trong CSS tinh khiết, đã thử nhiều lần ... Chúng tôi sẽ phải chờ đợi trước khi tạo kiểu dáng hình vuông hoàn hảo động! Tùy chọn duy nhất tôi thấy là Javascript giống như bạn đã viết thực sự. – Sebastien