ClassList.toggle funktioniert nicht innerhalb einer ul (HTML/CSS/JavaScript)

Christopher Lang

Ich bin also ziemlich neu in JavaScript und versuche, eine Dropdown-Navigationsleiste für mobile Geräte zu erstellen.

let mainNav = document.getElementById('js-menu');
let navBarToggle = document.getElementById('js-navbar-toggle');

navBarToggle.addEventListener('click', function () {

    mainNav.classList.toggle('active');
});

let dropdownNav = document.getElementById('js-dropdown-menu');
let dropdownToggle = document.getElementById('js-dropdown-toggle');

dropdownToggle.addEventListener('click', function () {

    dropdownNav.classList.toggle('active');
});
@import "https://fonts.googleapis.com/css?family=Lato:900i|Roboto:900|Roboto:700|Roboto:300&display=swap";

:root {
  --primary-color: #518985;
  --navbar-bg-color: #F2F2F2;
  --header-text-color: #000000;
  /*--text-color-1: #F2F2F2;*/
  /*--text-color-2: #000000;*/

  /*--header-height: 75px;*/
  /*--header-dropdown-tab-height: 50px;*/

  --logo-font: Lato, sans-serif;

  --tab-font: Roboto, sans-serif;
  --tab-font-weight: 300;
  --tab-font-size: 15px;

  /*--dropdown-tab-font-weight: 700;*/
  --dropdown-tab-font-size: 13px;
}

* {
  margin: 0;
  padding: 0;
  box-sizing: border-box;
}

body {
  font-family: Roboto, sans-serif;
  background-color: var(--primary-color);
}

.navbar {
  background: var(--navbar-bg-color);
  padding-bottom: 10px;
  font-size: 18px;
}

.navbar-toggle {
    position: absolute;
    top: 10px;
    right: 20px;
    cursor: pointer;
    font-size: 20px;
}

.logo {
  display: inline-block;
  font-size: 22px;
  padding-top: 10px;
  padding-left: 22px;

  font-family: var(--logo-font);
  font-style: italic;
  letter-spacing: -1.5px;
}

.logo-letter-accent-color {
  color: var(--primary-color);
}

.logo-letter-text-color {
  color: var(--header-text-color);
}

.main-nav {
  list-style-type: none;
  display: none;
  padding-top: 10px;
}

.active {
  display: block;
}

.nav-link, .logo {
  text-decoration: none;
  color: black;
}

.nav-link {
  display: block;
  width: 100%;
  padding: 8px 20px;
  font-family: var(--tab-font);
  font-family: var(--tab-font-weight);
  font-size: var(--tab-font-size);
}

.nav-dropdown {
  display: none;
}

.dropdown-link {
  padding-left: 30px;
  font-size: var(--dropdown-tab-font-size);
}

.dropdown-toggle {
  float: right;
}

#selected-tab {
  color: var(--primary-color);
}
<!DOCTYPE html>
<html lang="en" dir="ltr">
  <head>
    <meta charset="utf-8">
    <script src="https://kit.fontawesome.com/6a2f31ed4f.js" crossorigin="anonymous"></script>
    <link rel="stylesheet" href="header_mobile.css">
    <title></title>
  </head>
  <body>

    <!-- Start Nav -->
    <nav class="navbar">
      <span class="navbar-toggle" id="js-navbar-toggle">
        <i class="fas fa-bars"></i>
      </span>
      <a class="logo" href="#">
        <span class="logo-letter-accent-color">J</span><span class="logo-letter-text-color">D</span><span class="logo-letter-text-color">L</span>
      </a>
      <ul class="main-nav" id="js-menu">
        <li><a id="selected-tab" class="nav-link" href="#">Home</a></li>
        <li><a class="nav-link" href="#">Leben</a></li>
        <li><a class="nav-link" href="#">Interessen</a></li>
        <li><a class="nav-link" id="js-dropdown-toggle" href="#">Background<span class="dropdown-toggle">
          <i class="fas fa-chevron-down"></i>
        </span></a>
          <ul class="nav-dropdown" id="js-dropdown-menu">
            <li><a class="nav-link dropdown-link" href="#">Qualifikation</a></li>
            <li><a class="nav-link dropdown-link" href="#">Referenzen</a></li>
          </ul>
        </li>
        <li><a class="nav-link" href="#">Kontakt</a></li>
      </ul>
    </nav>
    <!-- End Nav -->

    <div class="page-wrapper">

    </div>

    <script src="header.js"></script>
  </body>
</html>

Dafür benötige ich zwei JavaScript-Aktionen: Eine für die Anzeige des Hauptnavigationssystems und eine für die Anzeige des Dropdown-Menüs. Der erste funktioniert gut. Die zweite funktioniert jedoch nicht, obwohl beide Aktionen irgendwie gleich sind.

Ich habe ein wenig herumgetestet und herausgefunden, dass das Problem damit zusammenhängt, dass die Funktion classList.toggle eine ID oder Klasse innerhalb der ersten ul anspricht, da die Funktion mit allem außerhalb der ul einwandfrei funktioniert.

Ich würde mich sehr freuen, wenn mir jemand hilft, da ich es weder selbst herausfinden kann noch online eine Lösung dafür finde.

Patareco

Problem ist mit CSS und Spezifität.

Wenn Sie eine Klasse deklarieren .nav-dropdown.active {display:block}, wird sie korrekt funktionieren. Das Ding ist .activeund .nav-dropdownhat die gleiche Spezifität und da das danach .nav-dropdowndeklariert wird .active, wird es immer Vorrang haben.

Die von mir gepostete Lösung erstellt einen Selektor mit höherer Spezifität, um das Problem zu lösen (der die Reihenfolge ersetzt).

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Anzeigen einer Benutzer-E-Mail mit keycloak Admin Client funktioniert nicht (UnrecognizedPropertyException)

Javascript中的classList.toggle

classList.toggle('class',true)与classList.add

设置classList.toggle的条件

classlist.toggle无法用于fa-check

多个div的classList.toggle()

classList.toggle(“ show”)在IE11中不起作用

classList.toggle()不起作用IE11 Angular 7(无效的调用对象)

单击时无法创建“ a”元素,随后classList.toggle()无法正常工作

element.classList.toggle()无法正常工作

类,颜色之间的平滑过渡| .classList.toggle,JavaScript

如何使classList.toggle跟随类的CSS

由于.classList.toggle,按钮的行为很奇怪

使用.classList和.toggle的Javascript函数在IE8中不起作用

Javascript funktioniert nicht

jQuery $(this).nextUntil('h3').toggle(); - 隐藏在 ul 中的 ul

在 JavaScript 中克隆后 classList.toggle() 不起作用

JavaScript 将 classList.toggle 仅应用于 onclick 元素

通过 classList.toggle("element") 向元素添加类后应用 CSS 样式

ClassList.toggle 在 ul (HTML/CSS/JavaScript) 中不起作用

类型错误:无法读取未定义的属性“toggle” - classList.toggle 反应

geom_line() Argumentorientierung funktioniert nicht

在外部 CSS 上使用 classList.toggle

Toggle() 或 ClassList.toggle()

带有 classList.toggle 的复选框不会切换类。未显示错误

使用 classList.toggle 定位多个类

创建 classList.toggle('active') 后,您尝试应用 CSS,但它不起作用

Javascript - classList.toggle ("my-class") 不起作用,因为主类正在获取多个

classList.toggle() 不添加类