I have this small script who's role is to help with responsive grid layouts by adding the class last-row
to the grid items placed on the last row:
function addLastRowClass() {
$(".blocks_section").each(function() {
var $grid_item = $(this).find(".news_box");
var maxTop = $grid_item.removeClass("last-row").map(function() {
var $item = $(this)
return $item.position().top;
}).get().reduce((acc, curr) => (curr > acc) ? curr : acc)
$grid_item.filter(function() {
var $item = $(this)
return $item.position().top == maxTop;
}).addClass("last-row");
});
}
addLastRowClass();
$(window).resize(addLastRowClass);
.blocks_section {
margin-top: 15px;
display: flex;
flex-wrap: wrap;
}
.blocks_section .news_box {
display: flex;
flex-direction: column;
background: #fff;
margin-bottom: 15px;
}
.blocks_section .news_box .content {
border: 1px solid #d5d5d5;
flex-grow: 1;
}
.blocks_section .news_box .title {
padding: 8px 8px 0 8px;
}
.blocks_section .text {
padding: 8px;
}
.blocks_section .title {
font-size: 1.25rem;
margin-bottom: 8px;
text-transform: capitalize;
}
.blocks_section .text {
margin-bottom: 8px;
text-align: justify;
}
.blocks_section .thumbnail img {
display: block;
width: 100%;
height: auto;
}
@media (max-width: 767px) {
.container {
max-width: 100%;
}
}
@media (max-width: 575px) {
.container {
max-width: 100%;
padding-left: 0;
padding-right: 0;
}
.blocks_section .news_box {
padding-left: 5px;
padding-right: 5px;
}
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/4.1.0/css/bootstrap.min.css" rel="stylesheet" />
<h1 chass="h3">Lorem ipsum dolor</h1>
<div class="blocks_section">
<div class="news_box col-xs-12 col-sm-6 col-md-4">
<div class="content">
<div class="thumbnail"><img src="https://i.stack.imgur.com/ZeOrf.jpg"></div>
<h2 class="title">Lorem ipsum dolor</h2>
<p class="text">Lorem ipsum dolor sit amet, consectetur adipisicing elit. Voluptatem inventore eos in voluptas ab, aut pariatur, dolores atque neque consequuntur.</p>
</div>
</div>
<div class="news_box col-xs-12 col-sm-6 col-md-4">
<div class="content">
<div class="thumbnail"><img src="https://i.stack.imgur.com/TICOa.jpg"></div>
<h2 class="title">Lorem ipsum dolor</h2>
<p class="text">Lorem ipsum dolor sit amet, consectetur adipisicing elit. Voluptatem inventore eos in voluptas ab, aut pariatur, dolores atque neque consequuntur.</p>
</div>
</div>
<div class="news_box col-xs-12 col-sm-6 col-md-4">
<div class="content">
<div class="thumbnail"><img src="https://i.stack.imgur.com/ZeOrf.jpg"></div>
<h2 class="title">Lorem ipsum dolor</h2>
<p class="text">Lorem ipsum dolor sit amet, consectetur adipisicing elit. Voluptatem inventore eos in voluptas ab, aut pariatur, dolores atque neque consequuntur.</p>
</div>
</div>
<div class="news_box col-xs-12 col-sm-6 col-md-4">
<div class="content">
<div class="thumbnail"><img src="https://i.stack.imgur.com/TICOa.jpg"></div>
<h2 class="title">Lorem ipsum dolor</h2>
<p class="text">Lorem ipsum dolor sit amet, consectetur adipisicing elit. Voluptatem inventore eos in voluptas ab, aut pariatur, dolores atque neque consequuntur.</p>
</div>
</div>
</div>
<h1 chass="h3">Praesentium, provident</h1>
<div class="blocks_section">
<div class="news_box col-xs-12 col-sm-6 col-md-4">
<div class="content">
<div class="thumbnail"><img src="https://i.stack.imgur.com/ZeOrf.jpg"></div>
<h2 class="title">Lorem ipsum dolor</h2>
<p class="text">Lorem ipsum dolor sit amet, consectetur adipisicing elit. Voluptatem inventore eos in voluptas ab, aut pariatur, dolores atque neque consequuntur.</p>
</div>
</div>
<div class="news_box col-xs-12 col-sm-6 col-md-4">
<div class="content">
<div class="thumbnail"><img src="https://i.stack.imgur.com/TICOa.jpg"></div>
<h2 class="title">Lorem ipsum dolor</h2>
<p class="text">Lorem ipsum dolor sit amet, consectetur adipisicing elit. Voluptatem inventore eos in voluptas ab, aut pariatur, dolores atque neque consequuntur.</p>
</div>
</div>
<div class="news_box col-xs-12 col-sm-6 col-md-4">
<div class="content">
<div class="thumbnail"><img src="https://i.stack.imgur.com/ZeOrf.jpg"></div>
<h2 class="title">Lorem ipsum dolor</h2>
<p class="text">Lorem ipsum dolor sit amet, consectetur adipisicing elit. Voluptatem inventore eos in voluptas ab, aut pariatur, dolores atque neque consequuntur.</p>
</div>
</div>
<div class="news_box col-xs-12 col-sm-6 col-md-4">
<div class="content">
<div class="thumbnail"><img src="https://i.stack.imgur.com/TICOa.jpg"></div>
<h2 class="title">Lorem ipsum dolor</h2>
<p class="text">Lorem ipsum dolor sit amet, consectetur adipisicing elit. Voluptatem inventore eos in voluptas ab, aut pariatur, dolores atque neque consequuntur.</p>
</div>
</div>
</div>
It has a simple and clear logic and it works but, on complex pages with multiple responsive grids, the console through the error: Reduce of empty array with no initial value
, leaving the second (third, etc) grid without this feature.
Questions:
- What is the cause of the error?
- What is the solution to the problem?