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://dmink.local/build/img/portfolio-preview-01.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://dmink.local/build/img/portfolio-preview-01.jpg" alt="Alt" title="Title">
                </div>
                <h3 class="portfolio-preview__title">Title 03</h3>
            </div>

		</section>

CSS

/* 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;
}

/* Responsive
--------------------------------------------------------------------- */
@media screen and (max-width: 1000px) {
    /* Main portfolio */
    .portfolio-preview {
        width: 46%;
    }
}
@media screen and (max-width: 600px) {
...

JavaScript

;"use strict";
// Portfolio preview animation

window.onload = addIndentPreview;
window.onresize = addIndentPreview;

var projectWrapper = document.querySelector(".js-preview-wrapper"),
    projectImg = document.querySelectorAll(".js-preview-img"),
    wrapperHeight, imgHeight, imgMargin,
    i, img;
    
 console.log(1);
console.log(projectImg);

function addIndentPreview() {
    wrapperHeight = projectWrapper.clientHeight;
    console.log(2);
		console.log(projectImg);
    for (i = 0; i < projectImg.length; i++) {
        img = projectImg[i];
        console.log(3);
        console.log(img);
        imgHeight = img.clientHeight;
        imgMargin = -(imgHeight - wrapperHeight) + "px";

        // img.style.marginTop = imgMargin;

        projectWrapper.onmouseover = function () {
            img.style.marginTop = imgMargin;
        };
        projectWrapper.onmouseout = function () {
            img.style.marginTop = 0;
        };
    }
}