<link href="//maxcdn.bootstrapcdn.com/bootstrap/4.1.1/css/bootstrap.min.css" rel="stylesheet" id="bootstrap-css">
<script src="//maxcdn.bootstrapcdn.com/bootstrap/4.1.1/js/bootstrap.min.js"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
<div id="masonry-effect">
<div class="item" style="height: 400px;"><a href="https://fjolt.com/article/css-grid-masonry" target="_blank">View Article</a></div>
<div class="item" style="height: 200px;">Item 2</div>
<div class="item" style="height: 350px;">Item 3</div>
<div class="item" style="height: 210px;">Item 4</div>
<div class="item" style="height: 600px;">Item 5</div>
<div class="item" style="height: 320px;">Item 6</div>
<div class="item" style="height: 80px;">Item 7</div>
<div class="item" style="height: 450px;">Item 8</div>
<div class="item" style="height: 600px;">Item 9</div>
<div class="item" style="height: 320px;">Item 10</div>
<div class="item" style="height: 80px;">Item 11</div>
<div class="item" style="height: 450px;">Item 12</div>
</div>
<script>
let mainId = 'masonry-effect';
let itemIdentifier = '#masonry-effect .item';
document.addEventListener('DOMContentLoaded', function(e) {
let item = document.querySelector(itemIdentifier);
let parentWidth = item.parentNode.getBoundingClientRect().width;
let itemWidth = item.getBoundingClientRect().width + parseFloat(getComputedStyle(item).marginLeft) + parseFloat(getComputedStyle(item).marginRight);
let columnWidth = Math.round((1 / (itemWidth / parentWidth)));
let arrayOfItems = Array.prototype.slice.call( document.querySelectorAll(itemIdentifier) );
let trackHeights = {};
arrayOfItems.forEach(function(item) {