【问题标题】:Why is my css nav toggle button is not working? [duplicate]为什么我的 CSS 导航切换按钮不起作用? [复制]
【发布时间】:2021-11-03 05:00:40
【问题描述】:

我试图为平板电脑/手机制作一个切换按钮,但它不起作用。 当我单击切换按钮时会调用 javascript 类所以我不知道出了什么问题...

我使用 defer 函数加载我的 js 以避免将其放在正文的末尾

<script defer src="assets/js/index.js"></script>

const navToggle = document.querySelector(".nav-toggle");
const navMenu = document.querySelector(".nav-menu");

navToggle.addEventListener("click", () => {
  navMenu.classList.toggle("nav-menu_visible");
});
/*my toggle button propertys on desktops*/

.header .nav .nav-toggle {
  color: white;
  background: none;
  border: none;
  font-size: 1.875em;
  padding: 0 1.250em;
  line-height: 60px;
  cursor: pointer;
  display: none;
}


/*for phones*/

@media (max-width: 1024px) {
  .header .nav .nav-toggle {
    display: block;
  }
  .header .nav .nav-menu {
    flex-direction: column;
    align-items: center;
    background-color: #2c3e50;
    position: fixed;
    left: 0;
    top: 60px;
    width: 100%;
    height: calc(100vh - 60px);
    /*100%*/
    overflow-y: auto;
    padding: 1.250em 0;
    left: 100%;
    transition: left 0.3s;
  }
  .nav-menu_visible {
    left: 0;
  }
}
<header class="header">
  <nav class="nav">
    <a href="#" class="logo">Portafolio</a>
    <button class="nav-toggle">
            <i class="fas fa-bars"></i>
        </button>
    <ul class="nav-menu">
      <li class="nav-menu-item"><a href="#header" class="nav-menu-link">Inicio</a></li>
      <li class="nav-menu-item"><a href="#about" class="nav-menu-link">Sobre Mí</a></li>
      <li class="nav-menu-item"><a href="#skills" class="nav-menu-link">Habilidades</a></li>
      <li class="nav-menu-item"><a href="#knowledge" class="nav-menu-link">Conocimientos</a></li>
      <li class="nav-menu-item"><a href="#works" class="nav-menu-link">Proyectos</a></li>
      <li class="nav-menu-item"><a href="#contact" class="nav-menu-link">Contacto</a></li>
    </ul>
  </nav>
</header>

我不知道为什么我的菜单没有从左 0 移动到左 100%(它没有显示:/)

【问题讨论】:

  • 您的预期结果是什么?
  • @HR01M8055 我希望如果我点击我的“切换按钮”会显示我的导航菜单,如果我再次点击切换按钮然后它会关闭我的导航菜单。

标签: javascript html css


【解决方案1】:

由于 CSS,它不起作用。您对nav-menu 的特殊性比您声明的要多得多。

.header .nav .nav-menu    // 0 3 0

(x y x) => (id, class, tag)

要么增加.nav-menu_visible的特异性,要么降低.nav-menu的特异性

1) 将特异性降低到0 1 0 as

.nav-menu                // 0 1 0

const navToggle = document.querySelector(".nav-toggle");
const navMenu = document.querySelector(".nav-menu");

navToggle.addEventListener("click", () => {
  navMenu.classList.toggle("nav-menu_visible");
});
body {
  background-color: black;
}

.header .nav .nav-toggle {
  color: white;
  background: none;
  border: none;
  font-size: 1.875em;
  padding: 0 1.250em;
  line-height: 60px;
  cursor: pointer;
  display: none;
}


/*for phones*/

@media (max-width: 1024px) {
  .header .nav .nav-toggle {
    display: block;
  }
  .nav-menu {
    flex-direction: column;
    align-items: center;
    background-color: #2c3e50;
    position: fixed;
    left: 0;
    top: 60px;
    width: 100%;
    height: calc(100vh - 60px);
    /*100%*/
    overflow-y: auto;
    padding: 1.250em 0;
    left: 100%;
    transition: left 0.3s;
  }
  .nav-menu_visible {
    left: 0;
  }
}
<link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.4/css/all.min.css" rel="stylesheet"/>



<header class="header">
  <nav class="nav">
    <a href="#" class="logo">Portafolio</a>
    <button class="nav-toggle">
          <i class="fas fa-bars"></i>
        </button>
    <ul class="nav-menu">
      <li class="nav-menu-item"><a href="#header" class="nav-menu-link">Inicio</a></li>
      <li class="nav-menu-item"><a href="#about" class="nav-menu-link">Sobre Mí</a></li>
      <li class="nav-menu-item"><a href="#skills" class="nav-menu-link">Habilidades</a></li>
      <li class="nav-menu-item"><a href="#knowledge" class="nav-menu-link">Conocimientos</a></li>
      <li class="nav-menu-item"><a href="#works" class="nav-menu-link">Proyectos</a></li>
      <li class="nav-menu-item"><a href="#contact" class="nav-menu-link">Contacto</a></li>
    </ul>
  </nav>
</header>

2)你也可以增加特异性来匹配nav-menu as

.header .nav .nav-menu_visible {   // 0 3 0

const navToggle = document.querySelector(".nav-toggle");
const navMenu = document.querySelector(".nav-menu");

navToggle.addEventListener("click", () => {
  navMenu.classList.toggle("nav-menu_visible");
});
body {
  background-color: black;
}

.header .nav .nav-toggle {
  color: white;
  background: none;
  border: none;
  font-size: 1.875em;
  padding: 0 1.250em;
  line-height: 60px;
  cursor: pointer;
  display: none;
}


/*for phones*/

@media (max-width: 1024px) {
  .header .nav .nav-toggle {
    display: block;
  }
  .header .nav .nav-menu {
    flex-direction: column;
    align-items: center;
    background-color: #2c3e50;
    position: fixed;
    left: 0;
    top: 60px;
    width: 100%;
    height: calc(100vh - 60px);
    /*100%*/
    overflow-y: auto;
    padding: 1.250em 0;
    left: 100%;
    transition: left 0.3s;
  }
  .header .nav .nav-menu_visible {
    left: 0;
  }
}
<link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.4/css/all.min.css" rel="stylesheet" />
<header class="header">

  <nav class="nav">
    <a href="#" class="logo">Portafolio</a>
    <button class="nav-toggle">
          <i class="fas fa-bars"></i>
        </button>
    <ul class="nav-menu">
      <li class="nav-menu-item"><a href="#header" class="nav-menu-link">Inicio</a></li>
      <li class="nav-menu-item"><a href="#about" class="nav-menu-link">Sobre Mí</a></li>
      <li class="nav-menu-item"><a href="#skills" class="nav-menu-link">Habilidades</a></li>
      <li class="nav-menu-item"><a href="#knowledge" class="nav-menu-link">Conocimientos</a></li>
      <li class="nav-menu-item"><a href="#works" class="nav-menu-link">Proyectos</a></li>
      <li class="nav-menu-item"><a href="#contact" class="nav-menu-link">Contacto</a></li>
    </ul>
  </nav>
</header>

【讨论】:

  • 谢谢兄弟,这就像一个魅力。你能给我一个例子来说明我如何让增加 .nav-menu_visible 的特异性吗?我想留下它,因为我喜欢 .header .nav .nav-menu 等...拜托兄弟!
  • 解决方案已更新。看看吧。
【解决方案2】:

function myFunction() {
  var x = document.getElementById("myDIV");
  if (x.style.display === "none") {
    x.style.display = "block";
  } else {
    x.style.display = "none";
  }
}
#myDIV {
  width: 100%;
  padding: 50px 0;
  text-align: center;
  background-color: lightblue;
  margin-top: 20px;
  }
  
<button onclick="myFunction()">Portafolio</button>



<nav id="myDIV">
  <ul class="nav-menu">
      <li class="nav-menu-item"><a href="#header" class="nav-menu-link">Inicio</a></li>
      <li class="nav-menu-item"><a href="#about" class="nav-menu-link">Sobre Mí</a></li>
      <li class="nav-menu-item"><a href="#skills" class="nav-menu-link">Habilidades</a></li>
      <li class="nav-menu-item"><a href="#knowledge" class="nav-menu-link">Conocimientos</a></li>
      <li class="nav-menu-item"><a href="#works" class="nav-menu-link">Proyectos</a></li>
      <li class="nav-menu-item"><a href="#contact" class="nav-menu-link">Contacto</a></li>
    </ul>
  
    
  </nav>
  

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-09-29
    • 2015-04-09
    • 1970-01-01
    • 2018-09-12
    • 1970-01-01
    • 1970-01-01
    • 2021-06-11
    相关资源
    最近更新 更多