包裹在 flexbox 网格中的 flex 项目的相等边距空间

Posted

技术标签:

【中文标题】包裹在 flexbox 网格中的 flex 项目的相等边距空间【英文标题】:Equal margin space for flex items that wrap in flexbox grid 【发布时间】:2017-01-04 18:35:25 【问题描述】:

我正在尝试使用 flexbox 创建一个响应式网格:

在大屏幕上,一行应该是三列 在较小的屏幕上,只有两排或一排

到目前为止我的代码:

.grid 
  display: flex;
  flex-wrap: wrap;

.gridColumn 
  flex: 1 1 0px;
  background-color: lightblue;
  min-width: 200px;
<div class="grid">
  <div class="gridColumn">
    <p>first column</p>
  </div>
  <div class="gridColumn">
    <p>second column</p>
  </div>
  <div class="gridColumn">
    <p>third column</p>
  </div>
</div>

现在,我想只设置列之间的边距(也不在网格的两侧),这在调整屏幕大小时也应该正确运行。有人知道实现这一目标的方法吗?

【问题讨论】:

排除媒体查询,也许这样的东西对你有用:jsfiddle.net/usLowo22/2 @Michael_B 不幸的是,这不起作用 - 列之间应该只有一个边距,而不是网格的左侧和右侧。 【参考方案1】:

这部分代码崩溃了

.gridColumn + .gridColumn 左边距:20px;

您应该尝试使用媒体查询并设置 margin-left: 0;在小屏幕上。

以上部分代码仍在工作,因为 flex-wrap 仅更改“第三列”的位置,该列之前仍然有“姐妹”,并且 margin-left 正在工作。

【讨论】:

【参考方案2】:

您可以为网格项目添加边距...

.gridColumn 
    margin: $margin;

...然后被其容器偏移。

.grid 
    margin: -$margin;

为避免溢出,您可以将overflow-x: hidden 应用于body

Codepen example

【讨论】:

以上是关于包裹在 flexbox 网格中的 flex 项目的相等边距空间的主要内容,如果未能解决你的问题,请参考以下文章

如何使网格列表中的每一行具有相同数量的项目(使用 Flexbox)? [复制]

Flexbox 网格 - 对齐:围绕空格并对齐最后一个项目

没有行的 Flexbox 垂直网格/仪表板

Flexbox项目换行到新行[重复]

聊聊Flexbox布局中的flex的演算法

Grid布局和Flex布局.md