Create a menu with a curtain falling animation using CSS and JavaScript
https://yogeshchauhan.com/create-a-menu-with-a-curtain-falling-animation-using-css-and-javascript/
by velo_ninja
HTML
<button id="menu-button-open">
MENU
</button>
<section id="menu" class="hide">
<button id="menu-button-close">
CLOSE
</button>
<ul>
<li>Item 1</li>
<li>Item 2</li>
<li>Item 3</li>
<li>Item 4</li>
<li>Item 5</li>
</ul>
</section>
<br><br><br>
<p class="blog">
This fiddle is a part of a <a href="https://yogeshchauhan.com/create-a-menu-with-a-curtain-falling-animation-using-css-and-javascript/" target="_blank">Blog Post on YogeshChauhan.com</a>
</p>
SCSS
#menu-button-open,
#menu-button-close {
margin: 1rem;
padding: 1rem;
background-color: green;
outline: none;
border: none;
cursor: pointer;
color: white;
}
#menu {
display: none;
position: absolute;
top: 0;
z-index: 1;
transform-origin: top center;
animation: curtain 1.5s;
animation-direction: forwards;
background: orange;
height: 100%;
width: 100%;
transition: all 1s ease-in;
ul {
display: flex;
flex-direction: column;
li {
background: blue;
padding: 0.9rem;
margin: 0.7rem;
list-style: none;
}
}
}
@keyframes curtain {
0% {
transform: perspective(25rem) rotateX(-90deg);
opacity: 1;
}
25% {
transform: perspective(25rem) rotateX(25deg);
}
55% {
transform: perspective(25rem) rotateX(-9deg);
}
100% {
transform: perspective(25rem) rotateX(0deg);
}
}
body {
margin: 0;
background: #444;
min-height: 200px;
color: ghostwhite;
}
.blog {
color: white;
position: absolute;
bottom: 5rem;
z-index: 2;
a {
color: white;
}
}
JavaScript
const menu = document.getElementById("menu");
document.getElementById("menu-button-open").addEventListener("click", function() {
menu.style.display = "block";
});
document.getElementById("menu-button-close").addEventListener("click", function() {
menu.style.display = "none";
});