【发布时间】:2018-01-24 12:39:31
【问题描述】:
我在 flexbox 网格中有四个 div。我希望它们一次包装两个,如下所示:
+-----------------------+
| 1 | 2 | 3 | 4 |
+-----------------------+
+-----------+
| 1 | 2 |
+-----------+ THIS IS WHAT I WANT
| 3 | 4 |
+-----------+
+-----+
| 1 |
+-----+
| 2 |
+-----+
| 3 |
+-----+
| 4 |
+-----+
现在,这似乎很简单,只需将它们嵌套在新的 flex 容器中并应用 flex-wrap,并给单元格一些最小宽度。但是,这样做的副作用是使中间视图看起来像这样:
+-----------+
| 1 | 3 |
+-----------+ NOT WHAT I WANT
| 2 | 4 |
+-----------+
显然,flexbox 想要首先包装内部 div,而不是考虑它们的行。为了保持所有其他包装工作,为嵌套 div 设置 flex-basis(例如 100%)不是一个选项。为了保持一切动态(例如,将第三个单元格添加到其中一行),在单元格上设置 %-widths 不是一种选择。为了避免硬断点和基于(动态)内容宽度的基础换行,我真的希望避免媒体查询。
这可以通过 flexbox 实现而不需要媒体查询吗?
div {
box-sizing: border-box;
margin: 2px;
}
.grid {
display: flex;
flex-flow: row wrap;
border: 2px solid blue;
flex: 1;
}
.cell {
flex: 1;
min-width: 100px;
border: 2px solid red;
background: white;
height: 100px;
}
<div class="grid">
<div class="grid">
<div class="cell">1</div>
<div class="cell">2</div>
</div>
<div class="grid">
<div class="cell">3</div>
<div class="cell">4</div>
</div>
</div>
编辑:我知道我可以让内部.grid 根本不换行,但我真正想要的是如果空间非常紧张,所有单元格都可以在彼此下方换行。 (如第一张插图。)
【问题讨论】:
-
我再次更新了我的答案,提供了更多解释和最佳解决方案示例