近四年后,@container
查询并aspect-ratio
提供了非常好的解决方案!
<div class="resize-at-will">
<div class="maintain-aspect-ratio">
...
</div>
</div>
<style>
.resize-at-will {
container-type: size;
display: flex;
justify-content: center;
align-items: center;
}
.maintain-aspect-ratio {
aspect-ratio: 16 / 9;
width: 100%;
background-color: #ff3e00;
}
@container (min-aspect-ratio: 16 / 9) {
.maintain-aspect-ratio {
width: auto;
height: 100%;
}
}
</style>
Run Code Online (Sandbox Code Playgroud)
请注意,它不响应视口,但实际上通过 CSS 声明响应父 div container-type: size;
。如果你想响应视口,只需使用@media ([min/max]-aspect-ratio: x / x) { ... }
另请注意,容器查询适用于大多数现代浏览器,但 Firefox 尚不支持。然而,有一个polyfill:https ://developer.chrome.com/blog/cq-polyfill/#the-container-query-polyfill