<nav>
<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>
<div class="burger">
<div class="line"></div>
<div class="line"></div>
<div class="line"></div>
</div>
</nav>
/* Transformed it into mobile-first */
nav {
background-color: #333;
display: flex;
justify-content: end;
align-items: center;
padding: 0 2rem;
height: 4rem;
border-radius: 10px;
box-shadow: 1px 3px 10px #333;
position: relative;
}
ul {
background-color: #333;
position: absolute;
top: 2rem;
left: 0;
width: 100%;
height: 0;
overflow: hidden;
/* visibility: hidden; */
padding: 0;
display: flex;
flex-flow: column nowrap;
justify-content: center;
align-items: center;
list-style: none;
transition: all 0.2s;
border-radius: 10px;
box-shadow: 1px 3px 10px #333;
transform-origin: top;
}
ul.show {
/* visibility: visible; */
height: 15rem;
}
.burger {
display: block;
cursor: pointer;
}
.line {
width: 30px;
height: 3px;
background-color: white;
margin: 5px;
transition: all 0.3s;
}
ul.show ~ .burger .line:nth-child(1) {
transform: rotate(45deg) translateY(10px);
}
ul.show ~ .burger .line:nth-child(2) {
opacity: 0;
}
ul.show ~ .burger .line:nth-child(3) {
transform: rotate(-45deg) translateY(-10px);
}
li {
margin: 1rem;
}
a {
color: white;
text-decoration: none;
font-size: 18px;
}
a:hover {
color: pink;
}
@media screen and (min-width: 768px) {
nav {
justify-content: start;
}
.burger{
display: none;
}
ul {
position: static;
height: auto;
flex-flow: row nowrap;
justify-content: start;
}
}
const burger = document.querySelector(".burger"),
ul = document.querySelector("nav ul"),
nav = document.querySelector("nav");
const closeMenu = () => {
ul.classList.remove("show");
};
burger.addEventListener("click", () => {
ul.classList.toggle("show");
});
window.document.addEventListener("click", (event) => {
const isClikedOutside = !nav.contains(event.target);
const isMenuOpen = ul.classList.contains("show");
if (isMenuOpen && isClikedOutside) {
closeMenu();
}
});
This Pen doesn't use any external CSS resources.
This Pen doesn't use any external JavaScript resources.