JSFiddle - React, Tailwind, and code Playground
HTML
<section class="portfolio-grid">
<div class="portfolio-preview">
<div class="portfolio-preview__project js-preview-wrapper">
<img class="portfolio-preview__img js-preview-img" src="http://i.imgur.com/Vxhkfsk.png" alt="Alt" title="Title">
</div>
<h3 class="portfolio-preview__title">Title 01</h3>
</div>
<div class="portfolio-preview">
<div class="portfolio-preview__project js-preview-wrapper">
<img class="portfolio-preview__img js-preview-img" src="http://i.imgur.com/erm7XUq.jpg" alt="Alt" title="Title">
</div>
<h3 class="portfolio-preview__title">Title 02</h3>
</div>
<div class="portfolio-preview">
<div class="portfolio-preview__project js-preview-wrapper">
<img class="portfolio-preview__img js-preview-img" src="http://i.imgur.com/P2wCI0z.gif" alt="Alt" title="Title">
</div>
<h3 class="portfolio-preview__title">Title 03</h3>
</div>
</section>
CSS
.js-preview-wrapper:hover > img {
top: 100%;
transform: translateY(-100%);
filter: blur(0);
}
img {
position: relative;
transition: 0.2s !important;
top: 0;
}
/* General
--------------------------------------------------------------------- */
* {
box-sizing: border-box;
}
body {
background: #336e7b;
font-family: "OpenSans", "Arial", sans-serif;
font-size: 18px;
line-height: 150%;
color: white;
}
.wrapper-container {
width: 100%;
max-width: 1200px;
margin: 0 auto;
}
a {
text-decoration: none;
}
img {
display: block;
max-width: 100%;
}
h1,
h2,
h3,
h4,
h5,
h6,
ul,
ol,
li {
padding: 0;
margin: 0;
}
p {
margin: 0 0 10px 0;
}
/* Page header
--------------------------------------------------------------------- */
/* Main portfolio
--------------------------------------------------------------------- */
.portfolio-grid {
padding: 20px 2%;
margin: 100px 0 0 0;
text-align: center;
font-size: 0;
}
.portfolio-preview {
display: inline-block;
width: 28%;
margin: 0 2% 30px 2%;
vertical-align: top;
}
.portfolio-preview__project {
overflow: hidden;
height: 300px;
border: 15px solid #40586c;
border-radius: 4px;
background: #4ecdc4;
}
.portfolio-preview__project:hover .portfolio-preview__img {
margin-top: 0;
}
.portfolio-preview .portfolio-preview__img {
transition: all 2s cubic-bezier(0, 0, 1, 1);
}
.portfolio-preview__title {
padding: 8px 10px;
font-family: "OpenSansBold", "Arial", sans-serif;
font-size: 18px;
}
/* Page footer
--------------------------------------------------------------------- */
.main-footer {
padding: 10px 0 0 0;
text-align: center;
}
/* Footer copyright */
.copyright-info {
display: inline-block;
padding: 20px 60px;
border-top: 1px dotted white;
vertical-align: top;
text-align: center;
color: white;
}
/*...