flex布局如何让换行后元素从头开始且和上一行有一定间距?

描述

要求是,各个元素之间相距24px,换行后,下一行的元素和第一行的开头元素对齐,并且和上一行元素也是24px的间距。

我的解决方案(有问题)

给兄弟元素设置margin-left和top,结果换行后的元素不是从头开始的,第二个元素如果没换行也会有margintop。

于是我就给每个元素设置了margin-right,兄弟元设置margin-bottom,结果第二个元直接换行的话,就触发不了margin-bottom,还是挨在了一起。

如果给每个元素都设置margin-bottom,只有一个元素时,高度看着不正常。

好无语。

难道flex只能用于不换行吗?

解决

.container {
  display: flex;
  flex-wrap: wrap;
  align-items: flex-start;
  gap: 16px 16px;
}
阅读 7.5k
4 个回答

可以用 gap 属性的话就很容易,直接 gap:24px;否则的话,display: grid,然后配合 gap 属性。最后就是 margin-bottom

你可以用nth-child选择器来解决这个问题,兼容性最好的方案:


<div class="container">
  <div class="row">
    <div class="item">Item 1</div>
    <div class="item">Item 2</div>
    ...
  </div>
  <div class="row">
    <div class="item">Item 1</div>
    <div class="item">Item 2</div>
    ...
  </div>
  ...
</div>

.container {
  display: flex;
  flex-wrap: wrap;
}

.row {
  display: flex;
}

.item {
  margin-right: 24px;
  margin-bottom: 24px;
}

.row .item:last-child {
  margin-right: 0;
}

最外层(overvlow:hidden),再拿一个容器套一下,向左上负间距(margin: -10px 0 0 -10px),然后子元素设置左上正间距(margin: 10px 0 0 10px)

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题