CSS3 flexbox布局一行最多3个子项

时间:2015-01-05 16:13:43

标签: html css3 flexbox

在将下一个子元素推送到新行之前,CSS中的一种简单方法是在同一行上具有固定的子项最大值吗?

flex wrapper with four child items

据我了解flexbox,如果子项目在其上方的线上有足够的可用空间,则只会将其推送到新行。但我正在寻找一个CSS规则或函数,让我说“ 我希望在任何给定的行上最多有3个子项,即使空间可用于第4个,也可以将其推向新的线 ”。

6 个答案:

答案 0 :(得分:11)

使用flex-basis。

.child {
flex-basis: 33%;
}

必须根据您的盒子大小模型以及边距和/或填充的使用来调整百分比。

答案 1 :(得分:3)

而不是使用display:flex,你可以使用float:left并清除每个第3个子节点,如下所示:

.child {
    background: #000;
    height: 300px;
    float: left;
    margin:15px 0 0 15px;
    width:150px;

}
.child:nth-child(3n+1) {
    clear: left;   
}

我为你创造了一个小提琴:fiddle example

如果父级只能容纳两个子级,则可以使用这个简短的jQuery修复:

var child = $('.child'),
    parent = $('.child').parent();

if( child.width() > (parent.width()/3) ) {
     child.css('clear', 'none');   
}

解决问题:fiddle example2

答案 2 :(得分:2)

或者您可以使用CSS Grid:

您的HTML:

<div class="parent">
    <div class="child"></div>
    <div class="child"></div>
    <div class="child"></div>
    <div class="child"></div>
</div>

你的CSS:

.parent {
    display: grid; // activate grid
    grid-template-columns: repeat(4, 1fr); //make 4 cols with size 1fr
    grid-gap: 20px; //gap between the rows
}
.child { //thats written with less. Just unnest for vanilla css
    &:nth-child(3n+1) {
      grid-column: 1;
    }
    &:nth-child(3n+2) {
      grid-column: 2;
    }
    &:nth-child(3n+3) {
      grid-column: 3;
    }
    &:nth-child(3n+4) {
      grid-column: 1; //put the fourth item in a new row
    }
}

我确信有更有效的方法可以用网格来编写它。但是这样做了。

答案 3 :(得分:1)

fiddle

#container {
  display: flex;
  flex-wrap: wrap;
  justify-content: space-around;
}
#container>div {
  margin: 15px;
  width: 150px;
  height: 150px;
}

/* negative paddings are treated as 0 so woohoo */
#container>div {
  /* up to 3 boxes in a row */
  padding: 0 calc((100% - 180px * 3) / 6);
}
#container>div {
  /* up to 4 boxes in a row */
  //padding: 0 calc((100% - 180px * 4) / 8);
}
#container>div {
  /* up to 5 boxes in a row */
  //padding: 0 calc((100% - 180px * 5) / 10);
}
/* 180px = width + horizontal margins */

答案 4 :(得分:0)

您可以将项目放在宽度为100%且最大宽度足以容纳其中三个项目的容器div中吗?

.parent {
    width:100%;
    max-width:350px;
}

然后将其放在所有项目周围。

<div class="parent">
    <div class="child"></div>
    <div class="child"></div>
    <div class="child"></div>
    <div class="child"></div>
</div>

答案 5 :(得分:0)

如果您在引导程序中使用它,则应将此css添加到伪行类

.row:before,
.row:after{
    width:0 !important;
 }