使用flexbox将元素换行到新行/行

时间:2015-09-16 19:28:20

标签: html css flexbox

我无法强迫项目进入flexbox布局的下一行。

我该如何处理以下图片?

enter image description here

这是我到目前为止所得到的:



#wrap {
  display: flex;
  width: 86vw;
  height: auto;
  box-sizing: border-box;
  margin: 0 auto;
}
.item1,
.item2 {
  width: 50%;
  height: 24.5vw;
  background: #4add69;
}
.item1 {
  margin-right: 10px;
}
.item2 {
  margin-left: 10px;
}
.item3 {
  width: 60%;
  height: 40vw;
  background: #d56c6c;
}

<div id="wrap">
  <div class="item1"></div>
  <div class="item2"></div>
  <div class="item3"></div>
</div>
&#13;
&#13;
&#13;

2 个答案:

答案 0 :(得分:18)

您的代码很好,但遗漏了两件事。

  1. 使用flex-wrap: wrap 创建一个新行。修改前两个项的宽度 单排出现。

  2. 对于最后两项,您需要将其嵌套在容器中 然后再把它们包起来。

  3. 操纵尺寸(宽度,高度)和边距值以实现完美/合适的布局。

    JSfiddle Demo

    * {
      margin: 0;
      padding: 0;
    }
    body {
      background: #232323;
      padding: 10px;
    }
    #wrap {
      display: flex;
      width: 86vw;
      height: auto;
      box-sizing: border-box;
      margin: 0 auto;
      flex-wrap: wrap;
      background: #232323;
      /* Added */
    }
    .item1,
    .item2 {
      width: 48%;
      /* Modified */
      height: 24.5vw;
      background: #4add69;
      margin-bottom: 10px;
    }
    .item1 {
      margin-right: 10px;
    }
    .item2 {
      margin-left: 10px;
    }
    .item3 {
      width: 55%;
      height: 40vw;
      background: #d56c6c;
      margin-right: 10px;
    }
    .nested-items {
      display: flex;
      width: 42%;
      flex-wrap: wrap;
      align-content: space-between;
    }
    .item4,
    .item5 {
      background: lightblue;
      width: 100%;
      height: 49%;
    }
    <div id="wrap">
      <div class="item1"></div>
      <div class="item2"></div>
      <div class="item3"></div>
      <div class="nested-items">
        <div class="item4"></div>
        <div class="item5"></div>
      </div>
    </div>

答案 1 :(得分:3)

基本上你需要为两个'小'元素添加额外的包装div,如下所示:

something = "test";
* {
  margin: 0;
  padding: 0;
  box-sizing: border-box;
}
.wrap {
  width: 75%;
  margin: 1em auto;
  border: 1px solid green;
  padding: .25em;
  display: flex;
  flex-wrap: wrap;
}
.wrap div {
  border: 1px solid grey;
  margin-bottom: 1px;
}
.box {
  height: 80px;
  background: lightblue;
  flex: 0 0 50%;
}
.tall {
  flex: 0 0 65%;
  height: 160px;
}
.col {
  flex: 0 0 35%;
  display: flex;
  flex-wrap: wrap;
}
.mini {
  flex: 0 0 100%;
  height: 80px;
  background: pink;
}

我在这里使用了一个单独的整体元素,但是图像表明这对于实际的行和之前提到的额外包装来说会更简单。

带有行的第二个选项的

Codepen Demo