On my Drupal 8 website, I have set up a newsfeed. How can I display the news items in staggered rows?
I would like the first item to align on the left and the second item to be on the right, repeating this pattern for all subsequent items. Currently, I am manually adding the class .right
to achieve this layout, which is working fine.
However, given that I need to display a large number of blocks in the feed, how can I add this class automatically?
<div class="col-xs-12 col-sm-12 col-md-12 col-lg-12 home-page-footer">
<div class="col-md-12 timelines">
<div class="main-timeline">
<div class="timeline">
<div class="timeline-icon">
<i class="fas fa-globe-americas"></i>
</div>
<div class="timeline-content">
<h3 class="title">Community</h3>
<p class="description">
By joining groups and sharing content within them, you can meet new people with similar interests and invite your friends. You also have the option to follow groups and shops.
</p>
</div>
</div>
<div class="timeline">
<div class="timeline-icon">
<i class="fas fa-thumbs-up"></i>
</div>
<div class="timeline-content right">
<h3 class="title">Simplicity</h3>
<p class="description">
S1BIOSE is user-friendly and accessible to everyone. It features responsive design, making it compatible with various devices (phones, tablets, e-readers, computers, and TVs) while its large buttons enhance touch screen usability.
</p>
</div>
</div>
<div class="timeline">
<div class="timeline-icon">
<i class="fas fa-cookie-bite"></i>
</div>
<div class="timeline-content">
<h3 class="title">Privacy-Conscious</h3>
<p class="description">
S1BIOSE is hosted by a French company on servers located in France and is registered with the National Commission for Information Technology and Civil Liberties (CNIL). Users can delete their accounts and posts at any time.
</p>
</div>
</div>
</div>
</div>
</div>
CSS:
.main-timeline .timeline-content {
width: 45%;
padding: 20px;
border-radius: 5px;
background: #ffffff;
-webkit-box-shadow: 0 0 10px rgba(0,0,0,0.22);
-moz-box-shadow: 0 0 10px rgba(0,0,0,0.22);
-ms-box-shadow: 0 0 10px rgba(0,0,0,0.22);
-o-box-shadow: 0 0 10px rgba(0,0,0,0.22);
box-shadow: 0 0 10px rgba(0,0,0,0.22);
}
.main-timeline .timeline-content:before {
content: "";
border-left: 7px solid #ffffff;
border-top: 7px solid transparent;
border-bottom: 7px solid transparent;
position: absolute;
left: 45%;
top: 20px;
}
.main-timeline .timeline-content.right {
float: right;
}
.main-timeline .timeline-content.right:before {
content: "";
right: 45%;
left: inherit;
border-left: 0;
border-right: 7px solid #ffffff;
}
Manually adding the .right class to .timeline-content produces the desired result:
For automatic addition of the .right class to every even-numbered line when creating a view with Drupal:
To accomplish this in a JavaScript file, use the following code snippet:
$('.timelines').on('even', function () {
$('timeline-content').addClass('right');
});
$('.timeline:nth-child(even) .timeline-content').addClass('right');
.main-timeline {
position: relative;
}
.main-timeline:before {
z-index: -1;
content: "";
width: 3px;
height: 100%;
background: #ffffff;
-webkit-box-shadow: 0 0 10px rgba(0,0,0,0.22);
-moz-box-shadow: 0 0 10px rgba(0,0,0,0.22);
-ms-box-shadow: 0 0 10px rgba(0,0,0,0.22);
-o-box-shadow: 0 0 10px rgba(0,0,0,0.22);
box-shadow: 0 0 10px rgba(0,0,0,0.22);
position: absolute;
top: 0;
left: 49.9%;
}
.main-timeline .timeline {
margin-top: 50px;
position: relative;
}
.main-timeline .timeline:before,
.main-timeline .timeline:after {
content: "";
display: block;
width: 100%;
clear: both;
}
.main-timeline .timeline-icon {
width: 52px;
height: 52px;
border-radius: 50%;
background: #ffffff;
-webkit-box-shadow: 0 0 10px rgba(0,0,0,0.22);
-moz-box-shadow: 0 0 10px rgba(0,0,0,0.22);
-ms-box-shadow: 0 0 10px rgba(0,0,0,0.22);
-o-box-shadow: 0 0 10px rgba(0,0,0,0.22);
box-shadow: 0 0 10px rgba(0,0,0,0.22);
overflow: hidden;
margin-left: -26px;
position: absolute;
top: 0;
left: 50%;
text-align: center;
}
.main-timeline .timeline-icon img {
width: 50px;
height: 50px;
}
.main-timeline .timeline-content {
width: 45%;
padding: 20px;
border-radius: 5px;
background: #ffffff;
-webkit-box-shadow: 0 0 10px rgba(0,0,0,0.22);
-moz-box-shadow: 0 0 10px rgba(0,0,0,0.22);
-ms-box-shadow: 0 0 10px rgba(0,0,0,0.22);
-o-box-shadow: 0 0 10px rgba(0,0,0,0.22);
box-shadow: 0 0 10px rgba(0,0,0,0.22);
}
.main-timeline .timeline-content:before {
content: "";
border-left: 7px solid #ffffff;
border-top: 7px solid transparent;
border-bottom: 7px solid transparent;
position: absolute;
left: 45%;
top: 20px;
}
.main-timeline .timeline-content.right {
float: right;
}
.main-timeline .timeline-content.right:before {
content: "";
right: 45%;
left: inherit;
border-left: 0;
border-right: 7px solid #ffffff;
}
.timeline:nth-child(even) .timeline-content {
float: right;
}
.timeline:nth-child(even) .timeline-content:before {
content: "";
right: 45%;
left: inherit;
border-left: 0;
border-right: 7px solid #ffffff;
}
.main-timeline .timeline-title {
color: #000000;
padding: 10px;
background: #ffffff;
border-bottom: 1px solid #cccccc;
border-radius: 3px 3px 0 0;
margin: -20px -20px 0px -20px;
}
.main-timeline .timeline-title h3 {
font-size: 30px;
font-weight: 300;
margin-top: 0;
}
.main-timeline .timeline-title h6 {
margin-bottom: 0;
}
.main-timeline .timeline-description {
margin-top: 10px;
}
@media only screen and (max-width: 990px) {
.main-timeline .timeline-title h3 {
font-size: 25px;
}
.main-timeline .timeline-content::before {
top: 16px;
}
}
@media only screen and (max-width: 767px) {
.main-timeline {
margin-left: 20px;
}
.main-timeline:before {
left: 0;
}
.main-timeline .timeline-content {
width: 90%;
float: right;
}
.main-timeline .timeline-content:before,
.main-timeline .timeline-content.right:before {
left: 10%;
right: inherit;
margin-left: -6px;
border-left: 0;
border-right: 7px solid #ffffff;
}
.main-timeline .timeline-icon {
left: 0;
}
}
@media only screen and (max-width: 479px) {
.main-timeline .timeline-content {
width: 85%;
}
.main-timeline .timeline-content:before,
.main-timeline .timeline-content.right:before {
left: 15%;
}
.main-timeline .timeline-title h3 {
font-size: 20px;
}
.main-timeline .timeline-content:before {
top: 13px;
}
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="col-xs-12 col-sm-12 col-md-12 col-lg-12 home-page-footer">
<div class="col-md-12 timelines">
<div class="main-timeline">
<div class="views-element-container form-group"><div class="view view-timeline-public view-id-timeline_public view-display-id-block_1 js-view-dom-id-38d0b8b38b7d1f7be5c3ba53e63939fd9979deb1ce7bd918a170a79832785389">
<div class="view-content">
<div data-drupal-views-infinite-scroll-content-wrapper="" class="views-infinite-scroll-content-wrapper clearfix form-group"> <div class="views-row"><div>
<div class="timeline">
<div class="timeline-icon">
https://www.s1biose.com/sites/default/files/styles/thumbnail/public/2018-02/linux_circuit_board_penguin_avatar_by_duradcell-d6gzwwu.jpg?itok=JnvROb1j
</div>
<div class="timeline-content">
<div class="timeline-title">
<h3><a href="/discussion/test-56">test 56</a></h3>
<h6>jeu, 06/09/2018 - 12:57</h6>
</div>
<p class="timeline-description">
New content (Discussion)<br>
created by <a href="/user/1">administrator</a><br>
in the group [message:field_group_reference:entity:title]
</p>
</div>
</div>
</div>
</div>
<div class="views-row"><div>
<div class="timeline">
<div class="timeline-icon">
https://www.s1biose.com/sites/default/files/styles/thumbnail/public/2018-02/linux_circuit_board_penguin_avatar_by_duradcell-d6gzwwu.jpg?itok=JnvROb1j
</div>
<div class="timeline-content">
<div class="timeline-title">
<h3><a href="/discussion/test-77">test 77</a></h3>
<h6>jeu, 06/09/2018 - 12:56</h6>
</div>
<p class="timeline-description">
New content (Discussion)<br>
created by <a href="/user/1">administrator</a><br>
in the group [message:field_group_reference:entity:title]
</p>
</div>
</div>
</div>
</div>
<div class="views-row"><div>
<div class="timeline">
<div class="timeline-icon">
https://www.s1biose.com/sites/default/files/styles/thumbnail/public/2018-02/linux_circuit_board_penguin_avatar_by_duradcell-d6gzwwu.jpg?itok=JnvROb1j
</div>
<div class="timeline-content">
<div class="timeline-title">
<h3><a href="/discussion/test-55">test 55</a></h3>
<h6>jeu, 06/09/2018 - 12:56</h6>
</div>
<p class="timeline-description">
New content (Discussion)<br>
created by <a href="/user/1">administrator</a><br>
in the group [message:field_group_reference:entity:title]
</p>
</div>
</div>
</div>
</div>
<div class="views-row"><div>
<div class="timeline">
<div class="timeline-icon">
https://www.s1biose.com/sites/default/files/styles/thumbnail/public/2018-02/linux_circuit_board_penguin_avatar_by_duradcell-d6gzwwu.jpg?itok=JnvROb1j
</div>
<div class="timeline-content">
<div class="timeline-title">
<h3><a href="/discussion/test-6">test 6</a></h3>
<h6>jeu, 06/09/2018 - 12:08</h6>
</div>
<p class="timeline-description">
New content (Discussion)<br>
created by <a href="/user/1">administrator</a><br>
in the group [message:field_group_reference:entity:title]
</p>
</div>
</div>
</div>
</div>
<div class="views-row"><div>
<div class="timeline">
<div class="timeline-icon">
[message:author:user_picture:thumbnail]
</div>
<div class="timeline-content">
<div class="timeline-title">
<h3><a href="/user/11569">test</a></h3>
<h6>jeu, 06/09/2018 - 01:18</h6>
</div>
<p class="timeline-description">
Just signed up
</p>
</div>
</div>
</div>
</div>
</div>
<ul class="js-pager__items pager" data-drupal-views-infinite-scroll-pager="">
<li class="pager__item">
<a class="button" href="/node?page=1" title="Go to next page" rel="next">Show More</a>
</li>
</ul>
</div>
</div>
</div>
</div>
</div>