JSFiddle - React, Tailwind, and code Playground
by Alexandru Gatea
HTML
<div class="animated-menu">
<div class="menu-content">
<div class="menu-icon">
<span class="bar-top"></span>
<span class="bar-middle"></span>
<span class="bar-bottom"></span>
</div>
<div class="menu-text">
<span>M</span>
<span>E</span>
<span>N</span>
<span>U</span>
</div>
</div>
<div class="menu-items">
<ul class="menu-items-list">
<li class="menu-item">
<a href="#!" class="menu-link">Home</a>
</li>
<li class="menu-item">
<a href="#!" class="menu-link">About</a>
</li>
<li class="menu-item">
<a href="#!" class="menu-link">Contact</a>
</li>
</ul>
</div>
</div>
SCSS
* {
margin: 0;
padding: 0;
box-sizing: border-box;
font-family: "Gotham", sans-serif;
transition: all 0.25s ease-in-out;
}
body {
background: #ffbc11;
}
.animated-menu {
background: white;
display: flex;
justify-content: flex-end;
align-items: center;
width: 50px;
cursor: pointer;
position: absolute;
top: 0;
left: 0;
height: 100vh;
box-shadow: 20px 0px 30px 0px rgba(0, 0, 0, 0.02);
transition: all 0.3s ease;
.menu-text {
display: flex;
justify-content: center;
align-items: center;
}
.menu-content {
transform: rotate(-90deg) translateY(20%);
transform-origin: center center;
}
.menu-items {
left: -100vh;
position: absolute;
top: 0;
padding: 20px 0;
a {
display: block;
padding: 20px 40px;
}
}
.menu-icon {
display: flex;
align-items: flex-end;
justify-content: center;
margin-bottom: 10px;
position: relative;
flex-shrink: 0;
width: 50px;
height: 50px;
span {
display: block;
width: 2px;
margin: 0 2px;
background: black;
}
.bar-top {
height: 20px;
}
.bar-middle {
height: 30px;
}
.bar-bottom {
height: 25px;
}
}
&:hover {
width: 50px;
.menu-content {
transform: rotate(-90deg) translateY(20%);
}
.menu-text {
span:nth-child(2),
span:nth-child(4) {
transform: translateY(-15%);
}
span:nth-child(1),
span:nth-child(3) {
transform: translateY(15%);
}
}
.menu-icon {
.bar-top {
height: 25px;
}
.bar-middle {
height: 40px;
}
.bar-bottom {
height: 30px;
}
}
...
JavaScript
$('.animated-menu .menu-content').on('click', function() {
$('.animated-menu').toggleClass('open');
});