【发布时间】:2017-11-05 00:25:58
【问题描述】:
我有两个 .flex-container 和 3 个 .box 孩子,我想以不同方式设置它们。查看我的 sn-p 以获得视觉效果和我的解决方案。
第一个很简单,因为我可以将第一个框设置为width: 100%;,然后使用flex-wrap: wrap;。很高兴。
对于第二个.flex-container,我发现我必须在最后两个框周围添加一个额外的容器.box-container,然后给它flex: auto; 以获得所需的效果。
我的问题是我需要这个额外的容器.box-container 吗?如果答案是肯定的,那就这样吧。我觉得我缺少一些基本的东西,但我认为它可能需要它,因为这些布局不是基于高度的,我猜它是垂直方向的?我尝试以不同的方式使用flex-direction: column;。
任何使用 flexbox 且没有额外容器的解决方案,例如我展示的第一个布局,将不胜感激。谢谢你。
* {
box-sizing: border-box;
}
section {
display: flex;
margin-bottom: 10px;
padding: 10px;
border-radius: 5px;
}
.flex-container-1 {
flex-wrap: wrap;
border: 3px solid seagreen;
background-color: mediumseagreen;
}
.flex-container-1 .box:first-of-type {
width: 100%;
}
.flex-container-2 {
border: 3px solid firebrick;
background-color: indianred;
}
.box-container {
flex: auto;
}
.box {
display: flex;
justify-content: center;
align-items: center;
flex: auto;
padding: 10px;
border: 1px solid #fff;
}
.box .box-num {
font-size: 40px;
color: #fff;
}
<section class="flex-container-1">
<div class="box">
<span class="box-num">1</span>
</div>
<div class="box">
<span class="box-num">2</span>
</div>
<div class="box">
<span class="box-num">3</span>
</div>
</section>
<section class="flex-container-2">
<div class="box">
<span class="box-num">1</span>
</div>
<div class="box-container">
<div class="box">
<span class="box-num">2</span>
</div>
<div class="box">
<span class="box-num">3</span>
</div>
</div>
</section>
【问题讨论】:
-
如果你可以在容器上设置一个固定的高度,那么第二个例子可以使用与第一个相同的方法来实现,除了
column wrap。如果没有,那么您需要一个用于第 2 项和第 3 项的嵌套容器。 -
如果你不关心 IE / Edge 支持,那么 CSS Grid Layout 可以轻松处理。
-
谢谢迈克尔,这就是我需要的答案。另外 +1 我从没想过要使用 flex-flow 直到现在。有道理