JSFiddle - React, Tailwind, and code Playground
by Chun
HTML
<div id="fire-nav" class="menu">
<span></span>
</div>
CSS
.menu span, .menu span:before, .menu span:after {
content: "";
display: block;
height: 12px;
width: 100%;
background-color: #40d47e;
}
.menu {
width: 85px;
height: 36px;
margin: 0 auto;
padding-top: 24px;
cursor: pointer;
}
.menu span:before {
-webkit-transform: translate(0, -24px);
transform: translate(0, -24px);
}
.menu span:after {
-webkit-transform: translate(0, 12px);
transform: translate(0, 12px);
}
.menu.open span {
-webkit-transform: rotate(180deg);
transform: rotate(180deg);
-webkit-transition: 0.7s ease-in-out;
transition: 0.7s ease-in-out;
}
.menu.open span:before {
width: 60%;
-webkit-transform: rotate(45deg) translate(20px, -40px);
transform: rotate(45deg) translate(20px, -40px);
-webkit-transition: 0.7s ease-in-out;
transition: 0.7s ease-in-out;
}
.menu.open span:after {
width: 60%;
-webkit-transform: rotate(-45deg) translate(29px, 32px);
transform: rotate(-45deg) translate(29px, 32px);
-webkit-transition: 0.7s ease-in-out;
transition: 0.7s ease-in-out;
}
.menu.close span {
-webkit-transform: rotate(360deg);
transform: rotate(360deg);
-webkit-transition: 0.7s ease-in-out;
transition: 0.7s ease-in-out;
}
.menu.close span:before {
width: 100%;
-webkit-transform: rotate(0deg) translate(0, -24px);
transform: rotate(0deg) translate(0, -24px);
-webkit-transition: 0.7s ease-in-out;
transition: 0.7s ease-in-out;
}
.menu.close span:after {
width: 100%;
-webkit-transform: rotate(0deg) translate(0, 12px);
transform: rotate(0deg) translate(0, 12px);
-webkit-transition: 0.7s ease-in-out;
transition: 0.7s ease-in-out;
}
JavaScript
var fireNav = document.getElementById('fire-nav');
function toggleMenu() {
var menu = fireNav;
if ( (' ' + menu.className + ' ').replace(/[\n\t]/g, ' ').indexOf('open') > -1 ) {
menu.classList.add('close');
setTimeout(function(){
menu.classList.remove('open','close');
}, 700);
} else {
menu.classList.add('open');
}
}
fireNav.addEventListener('click', function(){
toggleMenu();
});