JSFiddle - React, Tailwind, and code Playground
HTML
<body id="jtl-body" class="st-container st-pusher-trans">
<button id="navicon" class="menu-icon" data-effect="st-effect-2"></button>
<nav id="menu_wrapper" class="st-menu st-effect-2">
</nav>
<ul id="menu">
</ul>
<main class="st-pusher">
</main>
</body>
CSS
html,body {
height: 100%;
width: 100%;
}
.st-pusher {
position: relative;
left: 0;
z-index: 99;
background: #000;
height: 100%;
width: inherit;
overflow: hidden;
-webkit-transition: -webkit-transform 0.5s;
transition: transform 0.5s;
}
.st-pusher-trans {
-webkit-transition: width 0.5s ease-in-out, left 0.5s ease-in-out;
transition: width 0.5s ease-in-out, left 0.5s ease-in-out;
}
.st-pusher::after {
position: absolute;
top: 0;
right: 0;
width: 0;
height: 0;
}
.st-menu-open .st-pusher::after {
width: 100%;
height: 100%;
opacity: 1;
}
.st-menu {
position: absolute;
top: 0;
left: 0;
z-index: 100;
visibility: hidden;
width: 300px;
height: 100%;
-webkit-transition: all 0.5s;
transition: all 0.5s;
}
button#navicon {
height: 40px;
width: 40px;
margin-bottom: 40px;
color: #fff;
float: left;
background: #000;
border:none;
margin-top: 12px;
}
.st-effect-2.st-menu-open .st-pusher {
-webkit-transform: translate3d(300px, 0, 0);
transform: translate3d(300px, 0, 0);
}
.st-effect-2.st-menu {
z-index: 1;
}
.st-effect-2.st-menu-open .st-effect-2.st-menu {
visibility: visible;
-webkit-transition: -webkit-transform 0.5s;
transition: transform 0.5s;
}
.st-effect-2.st-menu::after {
display: none;
}
JavaScript
$(document).ready(function(){
$( "#navicon" ).on('click',function() {
$(this).toggleClass('menu-icon cover-icon');
if ( $( this ).hasClass('close-menu') ) {
var pushW = $('main.st-pusher').width();
var newW = pushW+300;
$(this).removeClass('close-menu');
$('#jtl-body').removeClass('st-menu-open');
} else {
var pushW = $('main.st-pusher').width();
var newW = pushW-300;
$('#jtl-body').addClass('st-effect-2');
$(this).addClass('close-menu');
$('#jtl-body').addClass('st-menu-open');
}
});
});