基于上 一个问题,我正在尝试在我的网格布局中添加更大的块。在最后一个问题中,我需要一个 div 跨越多行。现在的问题是我需要一个 div 来跨越多个行 _和列_。
如果我有一个 五元素行,我怎么能把更大的元素 放在它的中间 呢? (作为 float
自然地放在一边)。
这是一个示例片段:
#wrapper{
width: 516px;
}
.block{
display: inline-block;
width: 90px;
height: 50px;
margin: 5px;
background-color: red;
}
.bigger{
height: 110px;
}
.larger{
height: 110px;
width: 190px;
}
<div id="wrapper">
<div class="block"></div>
<div class="block bigger"></div>
<div class="block"></div>
<div class="block"></div>
<div class="block"></div>
<div class="block"></div>
<div class="block larger"></div>
<div class="block"></div>
<div class="block"></div>
<div class="block"></div>
<div class="block"></div>
</div>
我不想使用 display: grid
作为包装器元素,因为 我可以使用 说明 这是目前非常先进的技术。我希望有一个 非网格、 非表格的 解决方案。
原文由 PaulCo 发布,翻译遵循 CC BY-SA 4.0 许可协议
保持 HTML 原样,布局在 flexbox 中是不可能的。这主要是因为 2 x 2 框占据了第三列和第四列。你能得到的最接近的是:
如您所见,大框在列之间被分解。
正如 您引用的另 一篇文章中所述,由于您的子元素(
.block
)具有固定高度,我们可以确定容器的高度(.wrapper
)。通过知道容器的高度,可以使用
flex-direction: column
和flex-wrap: wrap
来实现上面的布局。容器上的固定高度用作断点,告诉弹性项目在哪里包装。
或者,如果您可以添加容器,那么布局很容易。只需创建四个嵌套的 flex 容器来容纳第 1、2、3-4 和 5 列,就完成了。
否则,请参阅此帖子了解更多详细信息和其他选项: