css - 将类 "collapse"添加到 flex 网格会导致间距不均匀

标签 css flexbox grid

所以,我正在创建一个基于 flexbox 的网格系统,一切都进行得很顺利。我的网格的基础是:

<div class="row">
<div class="column"><p>Column</p></div>
<div class="column"><p>Column</p></div>
<div class="column"><p>Column</p></div>
</div>

在我的 CSS 中:

.row {
    margin: 10px 0;
    display: flex;
    flex-wrap: wrap;
}

.column {
    padding: 10px;
    flex: 1 1 0%;
}

本质上,这使得列非常流畅,并且它们会收缩/增长以填充所有可用空间。这对我来说很棒,因为我需要在各种元素中使用它,而我无法为每个元素完全自定义网格。但是,我遇到了一个小“问题”。我打算创建一个名为“.collapse”的类,这样我就可以折叠左/右填充以使一些列紧挨着放在一起(例如:如果我想要一个带有背景颜色的 div(通过向column=> .column .green) 刷新到下一列中的图像)。但是,与上面的行/列相比,间距完全不正常。

<div class="row">
<div class="column purple collapse"><p>Column</p></div>
<div class="column red collapse"><p>Column</p></div>
<div class="column purple collapse"><p>Column</p></div>
<div class="column red collapse"><p>Column</p></div>
</div>

example screenshot here 正如您在我的小示例模型中看到的那样,它们确实有点排成一行,但是左右边距已经“减少”了。有什么聪明的方法吗?我尝试将“左/右页边距”添加到第一个类型和最后一个类型,但这只是有点老套,因为然后在两者之间添加的任何内容都开始出现奇怪的对齐问题。

最佳答案

对于这种网格系统,您通常不鼓励直接在网格单元格上使用结构样式,它允许您这样做:

.row {
  display: flex;
  flex-flow: row wrap;
  list-style: none;
  padding: 0;
  margin-left: -10px;
}

.column {
  flex: 1 0 0;
  padding-left: 10px;
}

.collapse           { margin-left: 0; }
.collapse > .column { padding-left: 0; }

.red,
.purple {
  padding: 10px;
  margin-bottom: 10px;
}

.red    { background-color: red; }
.purple { background-color: purple; }
<div class="row">
  <div class="column">
    <div class="purple">
      <p>Column</p>
    </div>
  </div>
  <div class="column">
    <div class="red">
      <p>Column</p>
    </div>
  </div>
  <div class="column">
    <div class="purple">
      <p>Column</p>
    </div>
  </div>
  <div class="column">
    <div class="red">
      <p>Column</p>
    </div>
  </div>
</div>

<div class="row collapse">
  <div class="column">
    <div class="purple">
      <p>Column</p>
    </div>
  </div>
  
  <div class="column">
    <div class="red">
      <p>Column</p>
    </div>
  </div>
  
  <div class="column">
    <div class="purple">
      <p>Column</p>
    </div>
  </div>
  
  <div class="column">
    <div class="red">
      <p>Column</p>
    </div>
  </div>
</div>

这种方法在外端不使用边距,我觉得这样更方便。

值得注意的是,随着 CSS Grid Layout 的出现,这种操作系统不再那么有用了,但你已经有了它。

附带说明一下,0 始终是 0,它永远不需要单位。

关于css - 将类 "collapse"添加到 flex 网格会导致间距不均匀,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58417652/

相关文章:

html - 新手 - 内容不在容器中

twitter-bootstrap-3 - Bootstrap 列不是并排的

javascript - 如何更改表格中点击的样式

html - 居中 CSS 菜单(我已经查看了很多答案,但无法弄清楚这个)

html - 缩放图像并将它们 float 成一行

html - 显示 block 没有将我的标签元素对齐在我的输入元素之上?

magento - 在管理员中更改订单网格上的行颜色的方法

python - 在 2D numpy 网格中查找相邻元素

css - 如何去除链接图像的背景?

html - 如何使基于 Web 的响应式布局中的绝对定位也适用于移动设备?