JSFiddle - React, Tailwind, and code Playground

by tjerabek

HTML

<div class="content">
    <a href="#" class="open-popup">Open popup</a>
</div>

CSS

.popup-window{
    position: absolute;
    z-index: 2;
    background: #FFF;
    width: 50%;
    left: 25%;
    margin: 0 auto;
    margin-top: -250px;
    
    -webkit-transition: all 400ms ease-in-out;
    -moz-transition: all 400ms ease-in-out;
    -ms-transition: all 400ms ease-in-out;
    -o-transition: all 400ms ease-in-out;
    transition: all 400ms ease-in-out;
    -webkit-box-shadow: 0px 2px 0px 0px rgba(0, 0, 0, 0.2);
box-shadow: 0px 2px 0px 0px rgba(0, 0, 0, 0.2);
}
.popup-overall{
    position: fixed;
    z-index: 1;
    background: #000;
    top: 0;
    bottom: 0;
    right: 0;
    left: 0;
    opacity: 0;
    -webkit-transition: all 400ms ease-in-out;
    -moz-transition: all 400ms ease-in-out;
    -ms-transition: all 400ms ease-in-out;
    -o-transition: all 400ms ease-in-out;
    transition: all 400ms ease-in-out;
}
.popup-content{
    padding: 1em;
}
.popup-overall.open{
    opacity: .3;
}
.popup-overall.closed{
    opacity: 0;
    z-index: -1;
}
.popup-window.open{
    margin-top: 50px;
}
.popup-window.closed{
    margin-top: -250px;
}
.open-popup{
    
}

JavaScript

$(document).ready(function() {
    $(document).on('click', '.open-popup', function() {

        var $openLink = $(this);
        var $popupWindow = $('<div class="popup-window"><div class="popup-content">Popup content</div></div>');
        var $overAll = $('<div class="popup-overall"></div>');
        var $content = $('.content');

        //TODO: Load from AJAX
        $content.append($overAll);
        $content.append($popupWindow);

        //var popupHeight = -parseInt($popupWindow.height());
        //$popupWindow.css('top', popupHeight + 'px');
        $overAll.on('click', function() {
            $popupWindow.addClass('closed');
            $overAll.addClass('closed');
        });

        $popupWindow.delay(1).queue(function(next) {
            $(this).addClass("open");
            next();
        });
        $overAll.delay(1).queue(function(next) {
            $(this).addClass("open");
            next();
        });

        return false;
    });
});