css - 将类“折叠”添加到 flex 网格会创建不均匀的间距
问题描述
所以,我正在创建一个基于 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>
此处的示例屏幕截图 正如您在我的小示例模型中看到的那样,它们确实排成一列,但左右边距“减少了”。有什么聪明的方法可以解决这个问题吗?我尝试将“左/右边距”添加到第一个类型和最后一个类型,但这只是有点棘手,因为在两者之间添加的任何内容都开始出现奇怪的对齐问题。
解决方案
对于这种网格系统,您通常不鼓励直接在网格单元上使用结构样式,它可以让您执行以下操作:
.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 的出现,这种 os 系统不再那么有用了,但是你已经有了。
附带说明一下,0 始终为 0,它从不需要单位。
推荐阅读
- javascript - Javascript简单滚动功能问题
- prisma - 为 prisma 数据模型中的数组字段定义是否需要
- mysql - 无法添加或更新子行:外键约束失败 ON DELETE CASCADE ON UPDATE CASCADE
- vba - 检查整数值与浮点值
- python-3.x - 删除行的重复组合值后,重复项未删除
- python - 如何从 pandas df 中选择多个列并将其存储在另一个 df 中?
- ios - 无效令牌 VoIP Apple 推送通知
- android - 如何在 Google Play 上更新应用程序时删除已声明的权限?
- angular - 未捕获的错误:模板解析错误:意外字符“EOF”
- html - css - 用于移动设备的 flex