如何避免 CSS 网格中出现空列

问题描述 投票:0回答:1

我正在研究网格布局,其中有不同尺寸(小型和中型)的内容卡。网格项是动态生成的,我想通过重新排列它们来避免空白,例如中型卡片向上移动以填充第一行,小卡片向下移动以避免空白。

我期待 css 属性

grid-auto-flow: dense
能够解决问题。是否有一个 css 属性可以为我完成这项工作,而不是用 JS 编写解决方案。

预期结果: 第一行:【小卡、中卡】(共填3列) 第二行:【小卡,空,空】

<html>
<style>
.wrapper {
  display: grid;
  grid-template-columns: repeat(3, minmax(120px, 1fr));
  gap: 10px;
  grid-auto-flow: dense;
}

.wrapper {
  border: 1px solid blue;
}

.medium_card, .small_card {
  padding: 12px;
}

.wrapper div.small_card {
  background-color: red;
}

.wrapper div.medium_card {
  background-color: green;
  grid-column-end: span 2;
}
</style>

<body>
<div class="wrapper">
  <div class="small_card">Small Card 1 (span 1)</div>
  <div class="small_card">Small Card 2 (span 1)</div>
  <div class="medium_card">Medium Card (span 2)</div>
</div>
</body>
</html>

html css grid
1个回答
0
投票

空白是由网格模板列引起的,因为您重复了三次而不是两次。

将此

grid-template-columns: repeat(3, minmax(120px, 1fr));
替换为此
grid-template-columns: repeat(2, minmax(120px, 1fr));
,您的问题将得到解决。

下面是工作示例。

<html>
<style>
.wrapper {
  display: grid;
  grid-template-columns: repeat(2, minmax(120px, 1fr));
  gap: 10px;
  grid-auto-flow: dense;
}

.wrapper {
  border: 1px solid blue;
}

.medium_card, .small_card {
  padding: 12px;
}

.wrapper div.small_card {
  background-color: red;
}

.wrapper div.medium_card {
  background-color: green;
  grid-column-end: span 2;
}
</style>

<body>
<div class="wrapper">
  <div class="small_card">Small Card 1 (span 1)</div>
  <div class="small_card">Small Card 2 (span 1)</div>
  <div class="medium_card">Medium Card (span 2)</div>
</div>
</body>
</html>

© www.soinside.com 2019 - 2024. All rights reserved.