我刚刚创建了一个响应式切换导航栏。一切工作正常,只有一个问题是它没有按照应有的方式正确切换。 在单击鼠标时可以看到下拉菜单,一旦我松开鼠标单击,下拉菜单就会消失(请参阅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>
答案 0 :(得分: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
答案 1 :(得分:0)
一个简单的CSS类作为解决方案
在下方添加您的样式。
header nav ul li:hover > ul {
display: block;
}
然后删除所有脚本