在flexbox列中并排设置两个flex项目

Jas*_*ame 6 html css css3 flexbox

我在display: flex容器中沿列方向显示一些元素。

这会将容器放入堆叠视图中。

假设我有5个堆叠的元素,我需要使其中两个显示内联或Flex方向行。

无需将有问题的两个元素放入另一个div中,我可以将flex方向行应用于...

是否可以使这些元素并排放置?

.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>
Run Code Online (Sandbox Code Playgroud)

Mic*_*l_B 7

使用 flexbox 布局相当简单。你不需要flex-direction: column.

只需flex-direction: rowflex-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%;
}
Run Code Online (Sandbox Code Playgroud)
<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>
Run Code Online (Sandbox Code Playgroud)

随着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;
}
Run Code Online (Sandbox Code Playgroud)
<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>
Run Code Online (Sandbox Code Playgroud)


小智 5

我认为一旦为父级提供了该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%;
   
    
}
Run Code Online (Sandbox Code Playgroud)
<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>
Run Code Online (Sandbox Code Playgroud)