我的目标是创建一个具有未知数量项目的响应式网格,将它们的纵横比保持在 16:9。现在它看起来像这样:
.grid {
display: grid;
grid-template-columns: repeat(auto-fill, 160px);
grid-template-rows: 1fr;
grid-gap: 20px;
}
.item {
height: 90px;
background: grey;
}
<div class="grid">
<div class="item"></div>
<div class="item"></div>
<div class="item"></div>
<div class="item"></div>
<div class="item"></div>
<div class="item"></div>
<div class="item"></div>
<div class="item"></div>
<div class="item"></div>
<div class="item"></div>
<div class="item"></div>
<div class="item"></div>
<div class="item"></div>
</div>
问题是,这些项目不会随屏幕尺寸缩放,从而导致在正确的位置出现边距。但是,当使用例如 grid-template-columns: repeat(auto-fit, minmax(160p, 1fr))
使网格适应屏幕尺寸并删除 height: 90px;
时,纵横比不会保持不变。
也许没有 css 网格有更好的解决方案? (也许使用javascript)
原文由 Flo 发布,翻译遵循 CC BY-SA 4.0 许可协议
您可以利用百分比填充基于宽度这一事实。
这篇 CSS 技巧文章 很好地解释了这个想法:
因此,为了使列保持纵横比:
Codepen Demo (调整大小看效果)