Grids using flexbox with fixed gutter sizes

Is it possible to apply a fixed margin (e.g. 5px) to a cell in a flexbox layout where the row space is evenly distributed between its columns?

I want to achieve:

this is the desired layout

My current CSS aligns only three columns in one row:

Jsfiddle

.row {
    display: flex;
    flex-flow: row wrap;
	box-shadow: 0 0 0 1px green;
}

.col {
    flex: 0 0 25%;
    text-align: center;
	box-shadow: 0 0 0 1px blue;
    background-color: steelblue;
	
	margin: 5px;
}
<div class="row">
    <div class="col">
		<div class="panel">1</div>
	</div>
    <div class="col">
		<div class="panel">2</div>
	</div>
    <div class="col">
		<div class="panel">3</div>
	</div>
    <div class="col">
		<div class="panel">4</div>
	</div>
	<div class="col"><div class="panel">5</div></div>
</div>
Run codeHide result
+4
source share
1 answer

You can use the calc () to the length flex-basis(in your case - it is a shorthand property flex), 10pxbecause margin-left: 5pxand margin-right: 5px:

Jsfiddle

.row {
    display: flex;
    flex-flow: row wrap;
    box-shadow: 0 0 0 1px green;
}

.col {
    flex: 0 0 calc(25% - 10px);
    text-align: center;
    box-shadow: 0 0 0 1px blue;
    background-color: steelblue;
    margin: 5px;
}
<div class="row">
    <div class="col">
        <div class="panel">1</div>
    </div>
    <div class="col">
        <div class="panel">2</div>
    </div>
    <div class="col">
        <div class="panel">3</div>
    </div>
    <div class="col">
        <div class="panel">4</div>
    </div>
    <div class="col">
        <div class="panel">5</div>
    </div>
</div>
Run codeHide result
+6
source

Source: https://habr.com/ru/post/1622895/


All Articles