JSFiddle - React, Tailwind, and code Playground
by graphettion
HTML
<nav>
<div class="navToggle">
<div class="icon"></div>
</div>
<ul>
<li><a href="#">Home</a></li>
<li><a href="#">About</a></li>
<li><a href="#">Services</a></li>
<li><a href="#">Contact</a></li>
</ul>
</nav>
CSS
* {
box-sizing: border-box;
}
body {
margin: 0;
padding: 0;
background-color: #f0f0f0;
font-family: 'Roboto', sans-serif;
position: relative;
}
nav {
width: 100%;
height: 100px;
background-color: white;
position: relative;
transition-duration: 0.5s;
transition-timing-function: swing;
overflow: hidden;
}
nav.open {
height: 300px;
}
nav ul {
padding-top: 100px;
padding-left: 35px;
}
nav ul li {
list-style: none;
}
nav ul li a {
padding: 10px 0;
display: inline-block;
text-decoration: none;
color: #4d4d4d;
}
.navToggle {
position: absolute;
width: 60px;
height: 60px;
top: 20px;
left: 20px;
transition-duration: 0.5s;
}
.navToggle .icon {
transition-duration: 0.25s;
position: absolute;
width: 30px;
height: 2px;
top: 30px;
left: 15px;
background-color: black;
}
.navToggle .icon:before,
.navToggle .icon:after {
transition-duration: 0.25s;
position: absolute;
width: 30px;
height: 2px;
background-color: black;
content: "";
}
.navToggle .icon:before {
top: -7px;
left: 0;
}
.navToggle .icon:after {
top: 7px;
left: 0;
}
.navToggle:hover {
cursor: pointer;
}
.navToggle:hover .icon:before {
top: -10px;
}
.navToggle:hover .icon:after {
top: 10px;
}
.navToggle.open {
transition-duration: 1s;
transform: rotate(180deg);
-webkit-transform: rotate(180deg);
}
.navToggle.open .icon {
transition-duration: 0.5s;
background-color: transparent;
}
.navToggle.open .icon:before {
transition-duration: 0.5s;
top: 0;
transform: rotate(45deg);
-webkit-transform: rotate(45deg);
}
.navToggle.open .icon:after {
transition-duration: 0.5s;
top: 0;
transform: rotate(-45deg);
-webkit-transform: rotate(-45deg);
}
JavaScript
$(".navToggle").click(function() {
$(this).toggleClass("open");
$("nav").toggleClass("open");
});