【问题标题】:Why are flex items not wrapping?为什么弹性项目不包装?
【发布时间】:2016-01-13 06:19:54
【问题描述】:

我正在尝试制作多行具有相同高度的正方形(每行 3 个)。

我为此编写了一些 HTML 和 CSS,但这些框都在同一行。

这是我目前所拥有的:

#list-wrapper {
  display: flex;
  width: 100%;
}
#list-wrapper div {
  width: 33.33%;
}
#list-wrapper div img {
  flex: 1;
}
<div id="list-wrapper">
  <div>
    <img src="images/1.png" alt="image one" />
  </div>
  <div>
    <img src="images/2.png" alt="image two" />
  </div>
  <div>
    <img src="images/1.png" alt="image one" />
  </div>
  <div>
    <img src="images/2.png" alt="image two" />
  </div>
  <div>
    <img src="images/1.png" alt="image one" />
  </div>
  <div>
    <img src="images/2.png" alt="image two" />
  </div>
</div>

当我用这个加载页面时,所有的框都会出现,但它们都在一条线上,超过了父 div 的 100% 宽度。

【问题讨论】:

    标签: html css flexbox


    【解决方案1】:

    如果您使用 flexbox 并希望内容换行,则必须指定 flex-wrap: wrap。默认情况下,弹性项目不换行。

    您的代码在这里什么都不做,因为#list-wrapper div img 的父级不是display: flex。你需要把它移到#list-wrapper div

    #list-wrapper div img {
        -webkit-flex: 1;
        -ms-flex: 1;
        flex: 1;
    }
    

    要使图像为三张,您应该指定flex-basis: 33.33333%

    把你的 CSS 改成这个,它就可以工作了:

    #list-wrapper {
        display: -ms-flexbox;
        display: -webkit-flex;
        display: flex;
        width: 100%;
        flex-wrap: wrap;
    }
    
    #list-wrapper div {
        flex: 0 0 33.333%;
    }
    

    JS 小提琴:https://jsfiddle.net/f47prnnt/1/

    【讨论】:

      【解决方案2】:

      弹性容器的初始设置是flex-wrap: nowrap

      这意味着当您创建一个弹性容器时(通过将display: flexdisplay: inline-flex 应用于一个元素)所有子元素(“弹性项目”)都被限制在一行中。

      要使弹性项目能够换行,请使用flex-wrap: wrap


      下面是一些 flex 属性如何工作的例子:

      一个简单的 flex 容器,其中包含包含图像的各种 flex 项:

      #list-wrapper {
          display: flex;
          border: 1px solid black;
      }
      
      #list-wrapper div {}
      
      #list-wrapper div img {
          height: 150px;
          width: 150px;
      }
      <div id="list-wrapper">
          <div><img src="http://i.imgur.com/60PVLis.png" alt=""></div>
          <div><img src="http://i.imgur.com/60PVLis.png" alt=""></div>
          <div><img src="http://i.imgur.com/60PVLis.png" alt=""></div>
          <div><img src="http://i.imgur.com/60PVLis.png" alt=""></div>
          <div><img src="http://i.imgur.com/60PVLis.png" alt=""></div>
          <div><img src="http://i.imgur.com/60PVLis.png" alt=""></div>
          <div><img src="http://i.imgur.com/60PVLis.png" alt=""></div>
          <div><img src="http://i.imgur.com/60PVLis.png" alt=""></div>
          <div><img src="http://i.imgur.com/60PVLis.png" alt=""></div>
          <div><img src="http://i.imgur.com/60PVLis.png" alt=""></div>
          <div><img src="http://i.imgur.com/60PVLis.png" alt=""></div>
          <div><img src="http://i.imgur.com/60PVLis.png" alt=""></div>
      </div>

      请注意,仅声明了一个 flex 属性:display: flex。这建立了弹性容器。默认情况下有以下行为:

      • flex-wrap: nowrap
      • flex-direction: row
      • justify-content: flex-start

      要允许项目包装,请添加flex-wrap: wrap

      #list-wrapper {
          display: flex;
          flex-wrap: wrap; /* NEW */
          border: 1px solid black;
      }
      
      #list-wrapper div { }
      
      #list-wrapper div img {
          height: 150px;
          width: 150px;
      }
      <div id="list-wrapper">
          <div><img src="http://i.imgur.com/60PVLis.png" alt=""></div>
          <div><img src="http://i.imgur.com/60PVLis.png" alt=""></div>
          <div><img src="http://i.imgur.com/60PVLis.png" alt=""></div>
          <div><img src="http://i.imgur.com/60PVLis.png" alt=""></div>
          <div><img src="http://i.imgur.com/60PVLis.png" alt=""></div>
          <div><img src="http://i.imgur.com/60PVLis.png" alt=""></div>
          <div><img src="http://i.imgur.com/60PVLis.png" alt=""></div>
          <div><img src="http://i.imgur.com/60PVLis.png" alt=""></div>
          <div><img src="http://i.imgur.com/60PVLis.png" alt=""></div>
          <div><img src="http://i.imgur.com/60PVLis.png" alt=""></div>
          <div><img src="http://i.imgur.com/60PVLis.png" alt=""></div>
          <div><img src="http://i.imgur.com/60PVLis.png" alt=""></div>
      </div>

      要每行只允许三个项目,请使用flex 属性:

      #list-wrapper {
          display: flex;
          flex-wrap: wrap;
          border: 1px solid black;
      }
      
      #list-wrapper div {
          margin: 10px;
          flex: 1 1 calc(33.33% - 20px); /* flex-grow, flex-shrink, 
                                            flex-basis: (width - margin) */
      }
      
      #list-wrapper div img {
          height: 150px;
          width: 150px;
      }
      <div id="list-wrapper">
          <div><img src="http://i.imgur.com/60PVLis.png" alt=""></div>
          <div><img src="http://i.imgur.com/60PVLis.png" alt=""></div>
          <div><img src="http://i.imgur.com/60PVLis.png" alt=""></div>
          <div><img src="http://i.imgur.com/60PVLis.png" alt=""></div>
          <div><img src="http://i.imgur.com/60PVLis.png" alt=""></div>
          <div><img src="http://i.imgur.com/60PVLis.png" alt=""></div>
          <div><img src="http://i.imgur.com/60PVLis.png" alt=""></div>
          <div><img src="http://i.imgur.com/60PVLis.png" alt=""></div>
          <div><img src="http://i.imgur.com/60PVLis.png" alt=""></div>
          <div><img src="http://i.imgur.com/60PVLis.png" alt=""></div>
          <div><img src="http://i.imgur.com/60PVLis.png" alt=""></div>
          <div><img src="http://i.imgur.com/60PVLis.png" alt=""></div>
      </div>

      此外,默认情况下,所有 flex 项目的高度都相同 (align-items: stretch)。

      #list-wrapper {
          display: flex;
          flex-wrap: wrap;
          border: 1px solid black;
      }
      
      #list-wrapper div {
          margin: 10px;
          flex: 1 1 calc(33.33% - 30px);
          border: 1px solid #ccc;
          background-color: lightgreen;
          text-align: center;
      }
      
      #list-wrapper div img {
          height: 150px;
          width: 150px;
      }
      <div id="list-wrapper">
          <div><img src="http://i.imgur.com/60PVLis.png" alt=""></div>
          <div><img src="http://i.imgur.com/60PVLis.png" alt=""></div>
          <div><img src="http://i.imgur.com/60PVLis.png" alt=""></div>
          <div><img src="http://i.imgur.com/60PVLis.png" alt=""></div>
          <div><img src="http://i.imgur.com/60PVLis.png" alt=""></div>
          <div><img src="http://i.imgur.com/60PVLis.png" alt=""></div>
          <div><img src="http://i.imgur.com/60PVLis.png" alt=""></div>
          <div><img src="http://i.imgur.com/60PVLis.png" alt=""></div>
          <div><img src="http://i.imgur.com/60PVLis.png" alt=""></div>
          <div><img src="http://i.imgur.com/60PVLis.png" alt=""></div>
          <div><img src="http://i.imgur.com/60PVLis.png" alt=""></div>
          <div><img src="http://i.imgur.com/60PVLis.png" alt=""></div>
      </div>

      如果你恢复flex-wrap: nowrap并给容器一个高度,拉伸会更明显:

      #list-wrapper {
          display: flex;
          /* flex-wrap: wrap; */
          border: 1px solid black;
          height: 600px;
      }
      
      #list-wrapper div {
          margin: 10px;
          flex: 1 1 calc(33.33% - 30px);
          border: 1px solid #ccc;
          background-color: lightgreen;
          text-align: center;
      }
      
      #list-wrapper div img {
          height: 150px;
          width: 150px;
      }
      <div id="list-wrapper">
          <div><img src="http://i.imgur.com/60PVLis.png" alt=""></div>
          <div><img src="http://i.imgur.com/60PVLis.png" alt=""></div>
          <div><img src="http://i.imgur.com/60PVLis.png" alt=""></div>
          <div><img src="http://i.imgur.com/60PVLis.png" alt=""></div>
          <div><img src="http://i.imgur.com/60PVLis.png" alt=""></div>
          <div><img src="http://i.imgur.com/60PVLis.png" alt=""></div>
          <div><img src="http://i.imgur.com/60PVLis.png" alt=""></div>
          <div><img src="http://i.imgur.com/60PVLis.png" alt=""></div>
          <div><img src="http://i.imgur.com/60PVLis.png" alt=""></div>
          <div><img src="http://i.imgur.com/60PVLis.png" alt=""></div>
          <div><img src="http://i.imgur.com/60PVLis.png" alt=""></div>
          <div><img src="http://i.imgur.com/60PVLis.png" alt=""></div>
      </div>

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-01-20
        • 2022-12-21
        • 2023-03-03
        • 2016-03-25
        • 2016-05-10
        • 2016-07-01
        • 1970-01-01
        相关资源
        最近更新 更多