javascript - 响应式导航栏未显示(汉堡菜单)

标签 javascript html css responsive hamburger-menu

我正在尝试制作所谓的“Hambuger 菜单”,它看起来非常好,但是当我单击它时什么也没有发生。

我有一个事件监听器来监听该按钮上的任何点击,然后根据它切换类以显示或隐藏 ul 元素。

我自己也找不到错误。还有更简单的方法吗?

const toggleButton = document.getElementsByClassName('toggle-button')[0];
const navbarLinks = document.getElementsByClassName('navbar-links')[0];

toggleButton.addEventListener('click' ,function (){
    navbarLinks.classList.toggle('active')
});
/* Basic/Boiler css */
*{
  box-sizing: border-box;
}
body{
  margin: 0;
  padding: 0;
}
/* nav bar  */
.navbar{
  display: flex;
  justify-content: space-between;
  align-items: center;
  background: #000;
  color: white;
}
.navbar-logo{
  width: 10rem;
  height: 3rem;
  margin: 0.5rem;
  border-radius: 4px;
}
.navbar-links ul{
  margin: 0;
  padding: 0;
  display: flex;
}
.navbar-links li{
  list-style: none;
  transition: font-size 0.5s ease-out 100ms;
}
.navbar-links li a{
  text-decoration: none;
  color: white;
  padding-right: 1rem;
  display: block;

}
.navbar-links li:hover{
 font-size: 1.4rem;
}
/* Responsive Navbar */
.toggle-button{
  position: absolute;
  top: .75rem;
  right: 1rem;
  display: none;
  flex-direction: column;
  justify-content: space-between;
  width: 30px;
  height: 21px;
}
.toggle-button .bar{
  height: 3px;
  width: 100%;
  background: white;
  border-radius: 10px;
}
@media (max-width: 650px){
  .toggle-button{
      display: flex;
  }
  .navbar-links{
      width: 100%;
  }
  .navbar-links ul{
      flex-direction: column;
      width: 100%;
      display: none;
  }
  .navbar-links li a{
      padding: 10px;
  }
  .navbar-links li{
      text-align: center;
  }
  .navbar{
      flex-direction: column;
      align-items: flex-start;

  }
  .navbar-links.active{
      display: flex;
  }
}
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
  <link rel="icon" href="/logo.png" type="image/jpg">
  <link rel="stylesheet" href="style.css">
</head>
<body>
<nav class="navbar">
    <div class="brand-titel"><img class="navbar-logo" src="/logo.png" alt="logo"></div>
    <a href="#" class="toggle-button">
      <span class="bar"></span>
      <span class="bar"></span>
      <span class="bar"></span>
    </a>
    <div class="navbar-links">
    <ul>
      <li><a href="">Home</a></li>
      <li><a href="">About</a></li>
      <li><a href="">Contact</a></li>
    </ul>
  </div>
</nav>
  <script src="front.js"></script>
</body>
</html>

我再次重复汉堡包显示正常,但当我单击它时它没有响应

最佳答案

您忘记在 CSS 文件中添加 .active 类。另外,您的 .navbar-links 应该有 display:none; 而不是其列表。

const toggleButton = document.getElementsByClassName('toggle-button')[0];
const navbarLinks = document.getElementsByClassName('navbar-links')[0];

toggleButton.addEventListener('click', function() {
  navbarLinks.classList.toggle('active');
});
/* Basic/Boiler css */

* {
  box-sizing: border-box;
}

body {
  margin: 0;
  padding: 0;
}


/* nav bar  */

.navbar {
  display: flex;
  justify-content: space-between;
  align-items: center;
  background: #000;
  color: white;
}

.navbar-logo {
  width: 10rem;
  height: 3rem;
  margin: 0.5rem;
  border-radius: 4px;
}

.navbar-links ul {
  margin: 0;
  padding: 0;
  display: flex;
}

.navbar-links li {
  list-style: none;
  transition: font-size 0.5s ease-out 100ms;
}

.navbar-links li a {
  text-decoration: none;
  color: white;
  padding-right: 1rem;
  display: block;
}

.navbar-links li:hover {
  font-size: 1.4rem;
}


/* Responsive Navbar */

.toggle-button {
  position: absolute;
  top: .75rem;
  right: 1rem;
  display: none;
  flex-direction: column;
  justify-content: space-between;
  width: 30px;
  height: 21px;
}

.toggle-button .bar {
  height: 3px;
  width: 100%;
  background: white;
  border-radius: 10px;
}

@media (max-width: 650px) {
  .toggle-button {
    display: flex;
  }
  .navbar-links {
    width: 100%;
    display: none;
  }
  .active {
    display: block;
    padding: 25px;
    color: white;
    font-size: 25px;
    box-sizing: border-box;
  }
  .navbar-links ul {
    flex-direction: column;
    width: 100%;
  }
  .navbar-links li a {
    padding: 10px;
  }
  .navbar-links li {
    text-align: center;
  }
  .navbar {
    flex-direction: column;
    align-items: flex-start;
  }
  .navbar-links .active {
    display: flex;
  }
}
<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
  <link rel="icon" href="/logo.png" type="image/jpg">
  <link rel="stylesheet" href="style.css">
</head>

<body>
  <nav class="navbar">
    <div class="brand-titel"><img class="navbar-logo" src="/logo.png" alt="logo"></div>
    <a href="#" class="toggle-button">
      <span class="bar"></span>
      <span class="bar"></span>
      <span class="bar"></span>
    </a>
    <div class="navbar-links">
      <ul>
        <li><a href="">Home</a></li>
        <li><a href="">About</a></li>
        <li><a href="">Contact</a></li>
      </ul>
    </div>
  </nav>
  <script src="front.js"></script>
</body>

</html>

关于javascript - 响应式导航栏未显示(汉堡菜单),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73602330/

相关文章:

javascript - 检查点是否位于两组坐标之间

javascript - 避免在 Chrome 开发者工具中单步执行 javascript 文件?

javascript - 将值传递给使用 Hooks 的组件

javascript - 在导航栏悬停时更改 div 的背景图像

javascript - 制作模糊形状的 HTML Canvas

html - 在固定页眉/页脚之间滚动 DIV

html - 居中的 <div> 并不完全居中,为什么?

javascript - 我的 toFixed();不工作

javascript - JSON jQuery 菜单问题

javascript - 水平/垂直(锚定)页面内容在链接单击时滚动