我在display: flex
容器中沿列方向显示了一些元素。
这会将容器放入堆叠视图中。
说我有5个堆叠的元素,我需要使其中两个显示内联或flex方向行。
无需将有问题的两个元素放入另一个div 中,我可以将伸缩方向行应用于...
是否可以使这些元素并排放置?
.flex-column {
display: flex;
flex-direction: column;
}
.flex-column .column-item:nth-of-type(4),
.flex-column .column-item:nth-of-type(5) {
width: calc(50% - 10px);
display: inline-block;
float: left;
}
.flex-column .column-item:nth-of-type(4) {
margin-right: 20px;
}
<div class="flex-column">
<div class="column-item">a</div>
<div class="column-item">b</div>
<div class="column-item">c</div>
<div class="column-item">d</div>
<div class="column-item">e</div>
</div>
答案 0 :(得分:4)
我认为一旦给父项提供了flex-direction:column;
属性,就不可能了,或者您可以启用flex-wrap:wrap
并使用flex-basis
属性控制元素的宽度。这样一来,您无需改变html结构即可获得所需的效果。
.flex-column {
display: flex;
flex-wrap:wrap;
}
.flex-column .column-item {
flex-basis:100%;}
.flex-column .column-item:nth-of-type(4),
.flex-column .column-item:nth-of-type(5) {
flex-basis:50%;
}
<div class="flex-column">
<div class="column-item">a</div>
<div class="column-item">b</div>
<div class="column-item">c</div>
<div class="column-item">d</div>
<div class="column-item">e</div>
</div>
答案 1 :(得分:1)
flexbox的布局非常简单。您不需要flex-direction: column
。
只需将flex-direction: row
与flex-wrap: wrap
一起使用。
然后使每个元素足够长以占据整行。
减少要共享行的元素上的flex-basis
。
.flex-column {
display: flex;
flex-wrap: wrap;
}
.column-item {
flex: 1 0 61%; /* flex-grow, flex-shrink, flex-basis */
margin: 2px;
background-color: lightgreen;
}
.column-item:nth-of-type(4),
.column-item:nth-of-type(5) {
flex-basis: 40%;
}
<div class="flex-column">
<div class="column-item">a</div>
<div class="column-item">b</div>
<div class="column-item">c</div>
<div class="column-item">d</div>
<div class="column-item">e</div>
</div>
在flex-grow: 1
速记中定义了flex
的情况下,无需使用calc()
。
由于flex-grow
将消耗该行的可用空间,因此flex-basis
仅需要足够大即可实施换行。在这种情况下,flex-basis: 61%
的边距有足够的空间,但第二个项目没有足够的空间。
使用CSS Grid还有一个更简单,更有效的解决方案:
.flex-column {
display: grid;
grid-template-columns: 1fr 1fr;
grid-gap: 5px;
}
.column-item:nth-of-type(-n + 3) {
grid-column: span 2;
}
.column-item {
background-color: lightgreen;
}
<div class="flex-column">
<div class="column-item">a</div>
<div class="column-item">b</div>
<div class="column-item">c</div>
<div class="column-item">d</div>
<div class="column-item">e</div>
</div>
答案 2 :(得分:-1)
尝试使用flex-wrap: wrap
,它的属性在flexbox中启用多行