To implement this, simply insert the following code snippet into your stylesheet under .flex-item
:
flex: calc((100% - 2rem) / 3);
box-sizing: border-box;
</pre>
The subtraction of 2rem accounts for the spacing between the first and second elements, as well as the second and third elements.
Your complete CSS should look like this:
.flex-container {
display: flex;
flex-wrap: wrap;
gap: 1rem;
}
.color {
background-color: limegreen;
}
.spacing {
padding: 1em;
}
.flex-item {
flex: calc((100% - 2rem) / 3);
box-sizing: border-box;
}
<div class="flex-container">
<div class="flex-item color spacing">1</div>
<div class="flex-item color spacing">2</div>
<div class="flex-item color spacing">2</div>
<div class="flex-item color spacing">4</div>
<div class="flex-item color spacing">5</div>
<div class="flex-item color spacing">6</div>
<div class="flex-item color spacing">7</div>
<div class="flex-item color spacing">8</div>
</div>
If you want the last two divs to occupy only the first and second columns, use width
instead of flex
in the .flex-item
class:
.flex-item {
width: calc((100% - 2rem) / 3);
box-sizing: border-box;
}
Your revised CSS would now be:
.flex-container {
display: flex;
flex-wrap: wrap;
gap: 1rem;
}
.color {
background-color: limegreen;
}
.spacing {
padding: 1em;
}
.flex-item {
width: calc((100% - 2rem) / 3);
box-sizing: border-box;
}
<div class="flex-container">
<div class="flex-item color spacing">1</div>
<div class="flex-item color spacing">2</div>
<div class="flex-item color spacing">2</div>
<div class="flex-item color spacing">4</div>
<div class="flex-item color spacing">5</div>
<div class="flex-item color spacing">6</div>
<div class="flex-item color spacing">7</div>
<div class="flex-item color spacing">8</div>
</div>