切换导航栏不能正确切换

问题描述 投票:0回答:2

我刚刚创建了一个响应式切换导航栏。一切都运转良好,只有一个问题是它没有正确切换。单击鼠标时可以看到下拉菜单,只要我松开鼠标,下拉菜单就会消失(请参阅http://testpage187.tumblr.com/)。桌面和移动都在发生这种情况(因为它具有响应性,我认为两者的工作方式相同)。我认为问题在于javascript代码。请仔细研究一下。我在这里附上我的代码。先感谢您。

$(document).ready(function() {
  $('.menu-toggle').click(function() {
    $('nav').toggleClass('active')
  })
  $('ul li').click(function() {
    $(this).siblings().removeClass('active');
    $(this).toggleClass('active');
  })
})
  body {
  margin: 0;
  padding: 0;
  width: 100%;
  font-family: sans-serif;
}

header {
  position: absolute;
  top: 50px;
  left: 0px;
  padding: 0 100px;
  background: #262626;
  width: 100%;
  box-sizing: border-box;
}

header .logo {
  color: #fff;
  float: left;
  height: 50px;
  line-height: 50px;
  font-size: 24px;
  font-weight: bold;
}

header nav {
  float: right;
}

header nav ul {
  margin: 0;
  padding: 0;
  display: block;
}

header nav ul li {
  list-style: none;
  display: inline;
  position: relative;
}

header nav ul li.sub-menu:before {
  content: '\f0d7';
  font-family: 'fontAwesome';
  position: absolute;
  line-height: 50px;
  color: #fff;
  right: 5px;
}

header nav ul li.active.sub-menu:before {
  content: '\f0d8';
}

header nav ul li ul {
  position: absolute;
  left: 0;
  top: 33px;
  background: #333;
  display: none;
}

header nav ul li:active ul {
  display: block;
}

header nav ul li ul li {
  display: block;
  width: 200px;
}

header nav ul li ul li a {
  display: inline-block;
}

header nav ul li a {
  height: 50px;
  line-height: 50px;
  padding: 0 20px;
  color: #fff;
  text-decoration: none;
  display: inline-block;
}

header nav ul li a:hover,
header nav ul li a:active {
  background: #2196f3;
}

.menu-toggle {
  color: #fff;
  float: right;
  line-height: 50px;
  font-size: 24px;
  cursor: pointer;
  display: none;
}

@media screen and (max-width: 800px) {
  header {
    padding: 0 20px;
  }
  .menu-toggle {
    display: block;
  }
  header nav {
    position: absolute;
    width: 100%;
    height: calc(100vh - 50px);
    background: #333;
    top: 50px;
    left: -100%;
    transition: 0.5s;
  }
  header nav.active {
    left: 0;
    top: 50px;
  }
  header nav ul {
    width: 100%;
    display: block;
    text-align: center;
  }
  header nav ul li {
    width: 100%;
    display: block;
    border-bottom: 1px solid rgba(0, 0, 0, .2);
  }
  header nav ul li a {
    display: block;
  }
  header nav ul li.active ul {
    position: relative;
    background: #003e6f;
  }
  header nav ul li ul li {
    width: 100%;
    text-align: center;
  }
<script src="https://code.jquery.com/jquery-3.3.1.js" integrity="sha256-2Kok7MbOyxpgUVvAk/HJ2jigOSYS2auK4Pfzbm7uH60=" crossorigin="anonymous"></script>
<header>
  <div class="logo">LOGO</div>
  <nav>
    <ul>
      <li><a href="#" class="active">Home</a></li>
      <li><a href="#">Trending</a></li>
      <li><a href="#">Popular</a></li>
      <li><a href="#" class="sub-menu">New  <i class="fas fa-caret-down"></i></a>
        <ul>
          <li><a href="#">New 1</a></li>
          <li><a href="#">New 2</a></li>
          <li><a href="#">New 3</a></li>
          <li><a href="#">New 4</a></li>
          <li><a href="#">New 5</a></li>
        </ul>
      </li>
      <li><a href="" class="sub-menu">Contact  <i class="fas fa-caret-down"></i></a>
        <ul>
          <li><a href="#">Contact 1</a></li>
          <li><a href="#">Contact 2</a></li>
          <li><a href="#">Contact 3</a></li>
          <li><a href="#">Contact 4</a></li>
        </ul>
      </li>
      <li><a href="#">About</a></li>
    </ul>
  </nav>
  <div class="menu-toggle"><i class="fa fa-bars" aria-hidden="true"></i></div>
javascript html css toggle navigationbar
2个回答
0
投票

这是解决方案:

你在CSS中遇到了问题。你在兄弟姐妹中添加了一个“状态”:active而不是类.active

CSS问题:

header nav ul li a:hover,
header nav ul li a:active {
  background:#2196f3;
}

header nav ul li:active ul{
    display:block;
}

CSS解决方案:

header nav ul li a:hover,
header nav ul li a.active {
  background:#2196f3;
}

header nav ul li.active ul{
    display:block;
}

而且我还修了一个top位移。

这是小提琴:Toggle solution


0
投票

一个简单的css类作为解决方案

在下面添加你的风格。

header nav ul li:hover > ul {
    display: block;
}

然后删除所有脚本

© www.soinside.com 2019 - 2024. All rights reserved.