Reputation: 14177
I have been trying to show three columns per row. Is it possible using flexbox?
My current CSS is something like this:
.mainDiv {
display: flex;
margin-left: 221px;
margin-top: 43px;
}
This code puts all content in a single row. I want to add a constraint to just shows three records per row.
Upvotes: 127
Views: 402026
Reputation: 4124
You can take advantage of a library that you may already have installed, bootstrap, and use their grid system which uses flexbox under the hood, while giving an easy to use semantic class naming system to implement it:
<!-- containers can have one or many child grids. Each grid should have a child row, which hold child columns -->
<div class='container'>
<div class='row'>
<div class='col'>col</div>
<div class='col'>col</div>
<div class='col'>col</div>
</div>
</div>
Upvotes: 0
Reputation: 31990
You can now use grid-auto-flow
https://jsfiddle.net/chalcrow/bqye79kr/1/
CSS
.grid-flow {
display: grid;
grid-auto-flow: row;
grid-template-columns: repeat(3, 1fr);
grid-template-rows: repeat(2, 1fr);
}
Note - the repeat(3, 1fr)
means '3 columns, each taking up 1 (equal) fraction of the available space.
HTML
<div class="grid-flow">
<div>1</div>
<div>2</div>
<div>3</div>
<div>4</div>
<div>5</div>
<div>6</div>
</div>
Result
Upvotes: 14
Reputation: 5764
Even though the above answer appears to be correct, I wanted to add a (hopefully) more readable example that also stays in 3 columns form at different widths:
.flex-row-container {
background: #aaa;
display: flex;
flex-wrap: wrap;
align-items: center;
justify-content: center;
}
.flex-row-container > .flex-row-item {
flex: 1 1 30%; /*grow | shrink | basis */
height: 100px;
}
.flex-row-item {
background-color: #fff4e6;
border: 1px solid #f76707;
}
<div class="flex-row-container">
<div class="flex-row-item">1</div>
<div class="flex-row-item">2</div>
<div class="flex-row-item">3</div>
<div class="flex-row-item">4</div>
<div class="flex-row-item">5</div>
<div class="flex-row-item">6</div>
</div>
Hope this helps someone else.
Upvotes: 84
Reputation: 586
Try this one using Grid Layout:
.grid-container {
display: grid;
grid-template-columns: auto auto auto;
padding: 10px;
}
.grid-item {
background-color: rgba(255, 255, 255, 0.8);
border: 1px solid rgba(0, 0, 0, 0.8);
padding: 20px;
font-size: 30px;
text-align: center;
}
<div class="grid-container">
<div class="grid-item">1</div>
<div class="grid-item">2</div>
<div class="grid-item">3</div>
<div class="grid-item">4</div>
<div class="grid-item">5</div>
<div class="grid-item">6</div>
<div class="grid-item">7</div>
<div class="grid-item">8</div>
<div class="grid-item">9</div>
</div>
Upvotes: 31
Reputation: 4431
This may be what you are looking for:
body>div {
background: #aaa;
display: flex;
flex-wrap: wrap;
}
body>div>div {
flex-grow: 1;
width: 33%;
height: 100px;
}
body>div>div:nth-child(even) {
background: #23a;
}
body>div>div:nth-child(odd) {
background: #49b;
}
<div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
</div>
Upvotes: 211