html - 显示 flex - 将网格元素推向左侧,同时保持网格元素之间的空间

标签 html css flexbox

我有一个使用 flex 的简单网格。工作正常,但我的问题是,当没有足够的元素来容纳该行时,它将元素间隔到边缘。

例如,当我有一行每行容纳 3 个元素并且总共有 5 个元素时,底行的两个元素将位于边缘,中间有一个间隙。

这是我的代码:

.grid {
  display: flex;
  justify-content: space-between;
  flex-wrap: wrap;
}

.grid div {
  flex-basis: 26%;
  height: 50px;
  background-color: red;
  margin-bottom: 20px;
}
<div class="grid">
  <div></div>
  <div></div>
  <div></div>
  <div></div>
  <div></div>
</div>

如您所见,底行有一个间隙。是否有一种 Flex 方法可以将所有内容推到左侧,同时保持 justify-content: space-between

我可以给除第 n 个 child 3n 之外的所有东西留出 margin ,但我想知道是否有更好的灵活方法来做到这一点。

最佳答案

解决方案是添加一个伪元素,使其表现得与其他元素类似,这样总共就有 6 个伪元素。

.grid {
  display: flex;
  justify-content: space-between;
  flex-wrap: wrap;
}

.grid div {
  flex-basis: 26%;
  height: 50px;
  background-color: red;
  margin-bottom: 20px;
}
.grid:after {
flex-basis: 26%;
  content:"";
}
<div class="grid">
  <div></div>
  <div></div>
  <div></div>
  <div></div>
  <div></div>
</div>

即使您最初有 6 个元素,这也不是问题,因为伪元素没有高度,因此它不会创建第三行。因此,无论最后一行中有多少元素(1,2 或 3),它总是有效:

.grid {
  display: flex;
  justify-content: space-between;
  flex-wrap: wrap;
  border:1px solid green;
}

.grid div {
  flex-basis: 26%;
  height: 50px;
  background-color: red;
  margin-bottom: 20px;
}
.grid:after {
flex-basis: 26%;
  content:"";
}
<div class="grid">
  <div></div>
  <div></div>
  <div></div>
  <div></div>
  <div></div>
  <div></div>
</div>

关于html - 显示 flex - 将网格元素推向左侧,同时保持网格元素之间的空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47520660/

相关文章:

javascript - 溢出:隐藏但让内容自动滚动

css - 如果我必须支持 IE9,是否值得使用 Flexbox?

javascript - Jquery - 通过单击 li 设置其他 li 元素的样式

html - 多个图像前面的文本

html - 保持在事件 div 上的 CSS 底部边框悬停效果

html - 不必要的类与元素选择器(CSS 性能)

javascript - 如何将文本从html输入写入json文件?

html - 使用窄间隙的 Flexbox 将列表拆分为 3 组

javascript - 使用显示 : flex; 为菜单设置动画

html - 如何在使用 css 表格时对齐 div 元素