当我减小窗口大小时,Flex-wrap不会换行

时间:2017-05-23 12:49:56

标签: html css css3 flexbox

我已经设置了一系列三个容器,并将display: flex;flex-wrap: wrap;应用于它们,但是当我缩小窗口大小时它们不会包装?

我已经将代码放在下面,似乎无法解决问题的根源。



body {
  font-family: arial;
}

p {
  color: white;
}

.container {
  background-color: #666;
  width: 800px;
  height: 200px;
  margin: 0 auto;
  display: flex;
  flex-wrap: wrap;
  justify-content: center;
}

.item {
  padding: 10px;
  box-sizing: border-box;
}

.item1 {
  flex: 1;
  background-color: red;
}

.item2 {
  flex: 1;
  background-color: blue;
}

.item3 {
  flex: 1;
  background-color: green;
}

<div class="container">

  <div class="item item1">
    <h1>ITEM1</h1>
    <p>flex: 1</p>
  </div>

  <div class="item item2">
    <h1>ITEM2</h1>
    <p>flex: 1</p>
  </div>

  <div class="item item3">
    <h1>ITEM3</h1>
    <p>flex: 1</p>
  </div>

</div>
&#13;
&#13;
&#13;

2 个答案:

答案 0 :(得分:12)

您需要在容器上使用max-width而不是width,您必须允许容器缩小以包装项目。

body {
  font-family: arial;
}

p {
  color: white;
}

.container {
  background-color: #666;
  max-width: 800px;
  height: 200px;
  margin: 0 auto;
  display: flex;
  flex-wrap: wrap;
  justify-content: center;
}

.item {
  padding: 10px;
  box-sizing: border-box;
}

.item1 {
  flex: 1;
  background-color: red;
}

.item2 {
  flex: 1;
  background-color: blue;
}

.item3 {
  flex: 1;
  background-color: green;
}
<div class="container">

  <div class="item item1">
    <h1>ITEM1</h1>
    <p>flex: 1</p>
  </div>

  <div class="item item2">
    <h1>ITEM2</h1>
    <p>flex: 1</p>
  </div>

  <div class="item item3">
    <h1>ITEM3</h1>
    <p>flex: 1</p>
  </div>

</div>

答案 1 :(得分:7)

这就是物品没有包装的原因:

您将Flex容器设置为width: 800px

容器有三个设置为flex: 1的弹性项目,简写为:

  • flex-grow: 1
  • flex-shrink: 1
  • flex-basis: 0

这意味着每个项目的实际宽度为0flex-basis: 0),每个项目的大小都取决于该行的可用空间(flex-grow: 1)。

因此,实际上,无论可能是什么,您都要将每个项目的大小调整为行上空间的三分之一。因此,每个项目都可以收缩到width: 0,并且它们永远不会换行。

如果您向一个或多个项目添加内容和/或width和/或flex-basis,并且项目增长到超过800px(容器的宽度),那么您的flex项目将换行

但请注意,它们不会根据您重新调整浏览器窗口大小进行换行,因为容器不会占用视口的width: 100%。它们只会根据容器的宽度进行换行。

body {
  font-family: arial;
}

p {
  color: white;
}

.container {
  background-color: #666;
  width: 800px;
  height: 200px;
  margin: 0 auto;
  display: flex;
  flex-wrap: wrap;
  justify-content: center;
}

.item {
  padding: 10px;
  box-sizing: border-box;
}

.item1 {
  flex: 1 0 250px;
  background-color: red;
}

.item2 {
  flex: 1 0 250px;
  background-color: blue;
}

.item3 {
  flex: 1 0 400px;
  background-color: green;
}
<div class="container">

  <div class="item item1">
    <h1>ITEM1</h1>
    <p>flex: 1 0 250px</p>
  </div>

  <div class="item item2">
    <h1>ITEM2</h1>
    <p>flex: 1 0 250px</p>
  </div>

  <div class="item item3">
    <h1>ITEM3</h1>
    <p>flex: 1 0 400px</p>
  </div>

</div>