我非常喜欢 Noam Rosenthal 的这个小技巧
<style>
.aspectRatioSizer {
display: grid;
}
.aspectRatioSizer > * {
grid-area: 1 / 1 / 2 / 2;
}
</style>
<div class="aspectRatioSizer">
<svg viewBox="0 0 7 2"></svg>
<div>
Content goes here
</div>
</div>
那里有两件事正在发生
- 一旦你给
<svg>
一个viewBox
,它就会全宽,但只有viewBox
值中隐含的纵横比那么高。viewBox
值本质上是 SVG 内部坐标系的“顶部、左侧、宽度、高度”,但它在没有自身高度的情况下,会对元素本身的大小产生副作用。这就是用于将父元素也“推入”纵横比。如果父元素必须伸展(例如,内容超过了适合的范围),它仍然会伸展,这是很好的。 - CSS Grid 用于将两个元素彼此堆叠,并且源代码顺序使内容位于顶部。