JSFiddle - React, Tailwind, and code Playground
by epinapala
HTML
<div class="container">
<div class="item">
<img src="https://placeimg.com/640/480/any" alt="" class="bg_img" />
<div class="text_wrapper">
<div class="text_position">
<h2 class="item--title">Item Title</h2>
<p class="item--text">Lorem ipsum dolor sit amet, consectetur adipisicing elit. Distinctio maiores suscipit illo nihil molestiae quas adipisci delectus facere odit hic placeat aut eius, quo atque eaque magni, iste iusto voluptate.</p>
</div>
</div>
</div>
<div class="item">
<img src="https://placeimg.com/640/480/rand" alt="" class="bg_img" />
<div class="text_wrapper">
<div class="text_position text_position-left">
<h2 class="item--title item--title-left">Item Title</h2>
<p class="item--text">Lorem ipsum dolor sit amet, consectetur adipisicing elit. Distinctio maiores suscipit illo nihil molestiae quas adipisci delectus facere odit hic placeat aut eius, quo atque eaque magni, iste iusto voluptate.</p>
</div>
</div>
</div>
<div class="item">
<img src="https://placeimg.com/640/480/rando" alt="" class="bg_img" />
<div class="text_wrapper">
<div class="text_position text_position-right">
<h2 class="item--title item--title-right">Item Title</h2>
<p class="item--text">Lorem ipsum dolor sit amet, consectetur adipisicing elit. Distinctio maiores suscipit illo nihil molestiae quas adipisci delectus facere odit hic placeat aut eius, quo atque eaque magni, iste iusto voluptate.</p>
</div>
</div>
</div>
</div>
<hr />
<div class="container">
<div class="item item-2-3">
<img src="https://placeimg.com/640/480/cba" alt="" class="bg_img" />
<div class="text_wrapper">
<div class="text_position">
<h2 class="item--title">Item Title</h2>
<p class="item--text">Lorem ipsum dolor sit amet, consectetur adipisicing elit. Distinctio maiores suscipit illo nihil molestiae quas adipisci delectus facere odit hic placeat...
CSS
html {
box-sizing: border-box;
}
*, *::before, *::after {
position: relative;
box-sizing: inherit;
}
.container {
max-width: 100%;
margin-left: auto;
margin-right: auto;
display: block;
width: 90%;
max-width: 90rem;
margin: 5rem auto;
}
.container:after {
content: " ";
display: block;
clear: both;
}
.item {
display: block;
width: 100%;
overflow: hidden;
border: 2px solid #676767;
margin: 3rem auto;
font-size: 1rem;
}
@media screen and (min-width: 40rem) {
.item {
box-sizing: border-box;
width: 100%;
float: left;
height: 60vw;
max-height: 30rem;
margin: 0 auto;
border: 0.2rem solid #fff;
}
}
@media screen and (min-width: 60rem) {
.item-1-3 {
box-sizing: border-box;
width: 33.33333%;
float: left;
font-size: 0.8rem;
}
}
@media screen and (min-width: 60rem) {
.item-2-3 {
box-sizing: border-box;
width: 66.66667%;
float: left;
}
}
.bg_img {
display: block;
width: 100%;
height: 60vw;
-o-object-fit: cover;
object-fit: cover;
}
@media screen and (min-width: 40rem) {
.bg_img {
position: absolute;
z-index: 0;
width: 100%;
height: 100%;
top: 50%;
left: 50%;
-webkit-transform: translate(-50%, -50%);
transform: translate(-50%, -50%);
-webkit-transition: width 1.3s ease-in-out, height 1.3s ease-in-out;
transition: width 1.3s ease-in-out, height 1.3s ease-in-out;
}
}
@media screen and (min-width: 40rem) {
.item:hover .bg_img {
width: 110%;
height: 120%;
}
}
.text_wrapper {
display: block;
color: #313131;
}
@media screen and (min-width: 40rem) {
.text_wrapper {
position: absolute;
top: 0;
right: 0;
bottom: 0;
left: 0;
opacity: 1;
background: rgba(0, 0, 0, 0.7);
color: #dfdfdf;
font-size: 1.25em;
-webkit-transition: opacity 0.3s ease-in-out;
transition: opacity 0.3s ease-in-out;
}
.text_wrapper:hover {
opacity: 0;
}
}
@media screen...