如何实现flex布局的元素超过某个数量就换行?

912 阅读1分钟

背景

假设有个场景需要flex布局来让元素横向排布,但是因为元素后续可以新增,有可能会变得很多,这时如果都弄到一行展示在观感上就很不好。所以就希望它能在一行超过5个之后再换行。(这样既能确保元素不会都纵向布局占据过多空间,又不会影响横向的展示效果)

那如何才能实现这种效果呢?

以下面这样的一个结构来举例。

<div class="container">
  <div class="item"></div>
  ...
</div>

步骤

1.  先给父元素设置`display:flex``flex-wrap:wrap`

1.  再通过`flex-basis`控制元素的实际展示宽度

    1.  这里一行展示5个就设置其值为20%

1.  然后再设置`flex-grow:1` ,让元素尽可能去占满剩余空间

最终代码

.container{
  display:flex;
  flex-wrap:wrap;
}
.item{
  flex-basis:20%;
  flex-grow:1
  // 或者写成
  flex:1 1 20%; // 分别表示flex-grow, flex-shrink, flex-basis的值
}