Wrapping Multiple Columns with Equal Spacing
by Michael Mandarino
HTML
<script src="https://code.jquery.com/jquery-1.12.4.min.js"></script>
<h1>Wrapping Multiple Columns with Equal Spacing - v1.0</h1>
<h2>Last Update: August 14th 2017 by Michael Mandarino</h2>
<div class="row">
<div class="col">
Col 1
</div>
<div class="col">
Col 2
</div>
<div class="col">
Col 3
</div>
<div class="col">
Col 4
</div>
<div class="col">
Col 5
</div>
<div class="col">
Col 6
</div>
<div class="col">
Col 7
</div>
<div class="col">
Col 8
</div>
<div class="col">
Col 9
</div>
<div class="col">
Col 10
</div>
</div>
SCSS
/* Base Styles */
*,
*:after,
*:before {
box-sizing: border-box;
}
body {
font-family: Helvetica, Arial, Sans-Serif;
font-size: 16px;
margin: 0 auto;
max-width: 1000px;
padding: 0.5em;
}
h1 {
color: #61bb46;
font-size: 2em;
}
h2 {
font-size: 0.75em;
margin-bottom: 1em;
}
/* Main Styles */
.row {
display: -ms-flexbox;
display: -webkit-flex;
display: flex;
-ms-flex-flow: row wrap;
-webkit-flex-flow: row wrap;
flex-flow: row wrap;
margin: 0 -1rem;
> .col {
-ms-flex: 1 0 calc(33.33% - 2rem);
-webkit-flex: 1 0 calc(33.33% - 2rem);
flex: 1 0 calc(33.33% - 2rem);
background-color: #61bb46;
border: 8px solid #00afba;
color: #fff;
margin: 1rem;
min-width: 300px;
padding: 1rem;
text-align: center;
&:before {
content: '';
display: inline-block;
vertical-align: middle;
padding-top: 100%;
}
/*Use Script to create hidden boxes, so that the last box does not stretch full width*/
&.hidden {
background-color: transparent;
border: dashed 1px red;
/*height: 0;*/
padding: 0;
}
}
}
JavaScript
$('.row').each(function() {
var count = $(this).find('.col').length;
var remainder = Math.abs((count % 3) - 3);
for (var i = 0; i < remainder; i++) {
$('<div class="col hidden"></div>').appendTo(this);
}
});