【问题标题】:Set two flex items side by side in a flexbox column在 flexbox 列中并排设置两个 flex 项
【发布时间】:2019-04-22 21:28:49
【问题描述】:

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

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

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

无需将有问题的两个元素放入另一个 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>

【问题讨论】:

    标签: html css flexbox


    【解决方案1】:

    使用 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%;
    }
    <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 简写中定义flex-grow: 1,就不需要使用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】:

      尝试使用flex-wrap: wrap,它的属性可以在flexbox中启用多行

      【讨论】:

      • 这个答案不正确,而不是投票 - 如果你愿意,你可以删除它。
      【解决方案3】:

      我认为一旦你给你的父母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>

      【讨论】:

      • 很好的答案,这是我在我的解决方案中实施的。请投票支持我的问题,以便我享有投票的声誉。 @Aaron McGuire
      猜你喜欢
      • 2017-05-15
      • 1970-01-01
      • 2018-07-03
      • 2015-05-03
      • 1970-01-01
      • 2015-10-07
      • 2015-06-19
      • 2018-07-30
      • 1970-01-01
      相关资源
      最近更新 更多