问题
I have a div and I have 12 items aligned at center using flex.
But I just want to have 4 items in row, so I want 3 rows of 4 columns.
This is ok to do with flex? And do you know how to do?
I'm trying to do that like this: https://jsfiddle.net/18mzsqcx/1/, but it's not working.
Or it's better to just create a div for example .col4
with width equal to 25% and some margins and put this class .col4
in each item?
*,
*:after,
*:before {
margin: 0;
padding: 0;
box-sizing: border-box;
-moz-box-sizing: border-box;
-webkit-box-sizing: border-box;
}
.container {
float: left;
width: 100%;
background-color: red;
}
.content {
width: 94%;
margin: 0px auto;
background-color: yellow;
padding: 30px;
}
.categories {
display: flex;
justify-content: space-between;
background-color: blue;
}
.categories_item a {
color: green;
}
.categories_item {
flex-grow: 1;
}
<div class="container">
<div class="div content">
<div class="categories">
<div class="categories_item">
<a href="" class="">
<span>Item</span>
</a>
</div>
<div class="categories_item">
<a href="" class="">
<span>Item</span>
</a>
</div>
<div class="categories_item">
<a href="" class="">
<span>Item</span>
</a>
</div>
<div class="categories_item">
<a href="" class="">
<span>Item</span>
</a>
</div>
<div class="categories_item">
<a href="" class="">
<span>Item</span>
</a>
</div>
<div class="categories_item">
<a href="" class="">
<span>Item</span>
</a>
</div>
<div class="categories_item">
<a href="" class="">
<span>Item</span>
</a>
</div>
<div class="categories_item">
<a href="" class="">
<span>Item</span>
</a>
</div>
<div class="categories_item">
<a href="" class="">
<span>Item</span>
</a>
</div>
<div class="categories_item">
<a href="" class="">
<span>Item</span>
</a>
</div>
<div class="categories_item">
<a href="" class="">
<span>Item</span>
</a>
</div>
<div class="categories_item">
<a href="" class="">
<span>Item</span>
</a>
</div>
</div>
</div>
</div>
回答1:
By default, a flex container is set to flex-wrap: nowrap. This means that flex items will not be able to wrap to new lines.
So the first thing you should do is add flex-wrap: wrap
to your container.
.categories {
display: flex;
justify-content: space-between;
flex-wrap: wrap; /* NEW */
}
Then, define your flex items so that only four can fit on a row.
Instead of this:
.categories_item { flex-grow: 1; }
Try this:
.categories_item { flex: 1 0 20%; margin: 5px; }
revised demo
*,
*:after,
*:before {
margin: 0;
padding: 0;
box-sizing: border-box;
}
.container {
float: left;
width: 100%;
background-color: red;
}
.content {
width: 94%;
margin: 0px auto;
background-color: yellow;
padding: 30px;
}
.categories {
display: flex;
justify-content: space-between;
flex-wrap: wrap; /* NEW */
}
.categories_item a {
color: white;
}
.categories_item {
flex: 1 0 20%; /* NEW */
margin: 5px; /* NEW */
background-color: blue;
}
<div class="container">
<div class="div content">
<div class="categories">
<div class="categories_item">
<a href="" class="">
<span>Item</span>
</a>
</div>
<div class="categories_item">
<a href="" class="">
<span>Item</span>
</a>
</div>
<div class="categories_item">
<a href="" class="">
<span>Item</span>
</a>
</div>
<div class="categories_item">
<a href="" class="">
<span>Item</span>
</a>
</div>
<div class="categories_item">
<a href="" class="">
<span>Item</span>
</a>
</div>
<div class="categories_item">
<a href="" class="">
<span>Item</span>
</a>
</div>
<div class="categories_item">
<a href="" class="">
<span>Item</span>
</a>
</div>
<div class="categories_item">
<a href="" class="">
<span>Item</span>
</a>
</div>
<div class="categories_item">
<a href="" class="">
<span>Item</span>
</a>
</div>
<div class="categories_item">
<a href="" class="">
<span>Item</span>
</a>
</div>
<div class="categories_item">
<a href="" class="">
<span>Item</span>
</a>
</div>
<div class="categories_item">
<a href="" class="">
<span>Item</span>
</a>
</div>
</div>
</div>
</div>
回答2:
This will do the trick, keep three elements in one div, so there will be 4 divs for 12 items
.container {
float: left;
width: 100%;
background-color: red;
}
.content {
width: 94%;
margin: 0px auto;
background-color: yellow;
padding: 30px;
}
.categories {
display: flex;
justify-content: space-between;
background-color: blue;
}
.categories_item a {
color: green;
}
.categories_item {
flex-grow: 1;
}
<div class="container">
<div class="div content">
<div class="categories">
<div id="row">
<div class="categories_item">
<a href="" class="">
<span>Item</span>
</a>
</div>
<div class="categories_item">
<a href="" class="">
<span>Item</span>
</a>
</div>
<div class="categories_item">
<a href="" class="">
<span>Item</span>
</a>
</div>
<div class="categories_item">
<a href="" class="">
<span>Item</span>
</a>
</div>
</div>
<div id="row">
<div class="categories_item">
<a href="" class="">
<span>Item</span>
</a>
</div>
<div class="categories_item">
<a href="" class="">
<span>Item</span>
</a>
</div>
<div class="categories_item">
<a href="" class="">
<span>Item</span>
</a>
</div>
<div class="categories_item">
<a href="" class="">
<span>Item</span>
</a>
</div>
</div>
<div id="row">
<div class="categories_item">
<a href="" class="">
<span>Item</span>
</a>
</div>
<div class="categories_item">
<a href="" class="">
<span>Item</span>
</a>
</div>
<div class="categories_item">
<a href="" class="">
<span>Item</span>
</a>
</div>
<div class="categories_item">
<a href="" class="">
<span>Item</span>
</a>
</div>
</div>
</div>
</div>
</div>
来源:https://stackoverflow.com/questions/45379566/a-flexbox-grid-with-three-3-rows-and-four-4-columns