我正在开发一个基本的 HTML、CSS 和 JavaScript 网站。我目前有一个适合移动设备的导航栏,并且当您单击汉堡菜单时有一个有趣的小动画。我遇到了一个问题,我正在尝试为适合移动设备查看的导航选项之一创建下拉菜单。我不确定如何进行这项工作。
预期是一个下拉菜单,可与我的移动设备友好的导航栏一起使用。
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>
最简单的答案是将其添加到您的 CSS 中:
.dropdown-content {
display: none;
position: absolute;
background-color: #1c1c1c;
box-shadow: 0px 8px 16px rgba(0,0,0,0.2);
}
.dropdown-content a {
padding: 12px 16px;
display: block;
}
后续可以在dropdown-content中添加html中的id,并根据需要修改js。