const navEl = document.querySelector('.nav');
const hamburgerEl = document.querySelector('.hamburger');
const navItemsEls = document.querySelectorAll('.nav-item');
hamburgerEl.addEventListener('click', () => {
navEl.classList.toggle('nav-open');
hamburgerEl.classList.toggle('hamburger-open');
});
navItemsEls.forEach(navItemsEl => {
navItemsEl.addEventListener('click', () => {
navEl.classList.remove('nav-open');
hamburgerEl.classList.remove('hamburger-open');
});
});
/* RESET */
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
ul {
list-style: none;
}
a {
text-decoration: none;
color: inherit;
}
/* BASE STYLE */
body {
background-color: #e8f0f7;
font-family: 'Inter', sans-serif;
min-height: 500vh;
}
/* NORMAL STYLES */
.header {
position: fixed;
width: 100%;
}
.navbar {
background-color: rgb(19, 22, 26);
}
.navbar-content {
min-height: 60px;
max-width: 1200px;
padding: 0 30px;
margin: 0 auto;
display: flex;
justify-content: space-between;
align-items: center;
}
.logo {
vertical-align: middle;
display: flex;
column-gap: 10px;
align-items: center;
}
.logo-img {
height: 30px;
}
.logo-text {
font-size: 20px;
color: #fff;
font-weight: 500;
letter-spacing: -0.5px;
}
.nav {
transition: all 0.3s ease-in-out;
}
.nav-list {
display: flex;
column-gap: 40px;
}
.nav-link{
color: rgba(255, 255, 255, 0.75);
transition: all 0.2s;
}
.nav-link:hover, .nav-link:focus {
color: rgba(255, 255, 255, 1);
}
.hamburger {
cursor: pointer;
display: none;
}
.bar {
height: 2px;
width: 27px;
background-color: #fff;
margin: 5px 0;
opacity: 0.8;
transition: all 0.3s ease-in-out;
}
/* For JS */
.nav-open {
left: 50% !important;
}
.hamburger-open .bar:nth-child(1) {
transform: translateY(7px) rotate(45deg);
}
.hamburger-open .bar:nth-child(2) {
transform: translateY(7px) rotate(45deg);
opacity: 0;
}
.hamburger-open .bar:nth-child(3) {
transform: translateY(-7px) rotate(-45deg);
}
/* MEDIA QUERIES */
@media (max-width: 650px) {
.nav {
position: fixed;
top: 60px;
left: -100%;
transform: translateX(-50%);
background-color: rgb(19, 22, 26);
width: 100%;
padding: 10px 0 25px;
}
.nav-list {
flex-direction: column;
align-items: center;
row-gap: 20px;
}
.nav-link {
font-size: 14px;
}
.hamburger {
display: block;
}
}
@media (max-width: 360px) {
.top-bar__content {
font-size: 10px;
}
}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>NavBar</title>
<link rel="stylesheet" href="style2.css">
<script defer src="script2.js"></script>
</head>
<body>
<div class="root">
<header class="header">
<div class="navbar">
<div class="navbar-content">
<a href="#" class="logo">
<img src="media/insert logo img here" alt="" class="logo-img">
</a>
<nav class="nav">
<ul class="nav-list">
<li class="nav-item">
<a href="#" class="nav-link">Home</a>
</li>
<li class="nav-item dropdown">
<a href="#" class="nav-link dropbtn">Products</a>
<div class="dropdown-content">
<a href="#" class="nav-link">Dropdown one</a>
<a href="#" class="nav-link">Dropdown two</a>
</div>
</li>
<li class="nav-item">
<a href="#" class="nav-link">About</a>
</li>
<li class="nav-tem">
<a href="#" class="nav-link">Contact</a>
</li>
</ul>
</nav>
<div class="hamburger">
<div class="bar"></div>
<div class="bar"></div>
<div class="bar"></div>
</div>
</div>
</div>
</header>
</div>
</body>
</html>
I’m working on a basic HTML, CSS, & JavaScript website. I currently have a navbar that is mobile friendly and has a fun little animation when you click on the hamburger menu. I’m having a problem where I’m trying to create a dropdown for one of the navigation options working for mobile friendly viewing. I’m uncertain of how to make this work.
Expected is a dropdown menu that will work with my mobile friendly navbar.
Ackersand is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.