如何解决Bootstrap导航栏下拉子菜单在折叠模式下不起作用
我正在建立一个新网站,而我的导航栏卡住了。
我面临的问题是子菜单(第二级下拉菜单)没有以折叠模式显示。如果您按下它以像正常下拉菜单一样打开,它的作用就好像它本身是一个链接,而不是打开子菜单。
在全屏模式下,它可以按预期工作,但是悬停而不是单击。
.navbar {
border-top-left-radius: 15px;
border-bottom-left-radius: 15px;
border-top-right-radius: 15px;
border-bottom-right-radius: 15px;
margin: 20px 50px 20px 50px;
}
.navbar {
background-color: #343a40;
}
.navbar .navbar-brand {
color: #4d8de5;
}
.navbar .navbar-brand:hover,.navbar .navbar-brand:focus {
color: #1a71e8;
}
.navbar .navbar-text {
color: #4d8de5;
}
.navbar .navbar-text a {
color: #1a71e8;
}
.navbar .navbar-text a:hover,.navbar .navbar-text a:focus {
color: #1a71e8;
}
.navbar .navbar-nav .nav-link {
color: #4d8de5;
border-radius: .25rem;
margin: 0 0.25em;
}
.navbar .navbar-nav .nav-link:not(.disabled):hover,.navbar .navbar-nav .nav-link:not(.disabled):focus {
color: #1a71e8;
}
.navbar .navbar-nav .dropdown-menu {
background-color: #343a40;
border: 2px solid #4d535a;
}
.navbar .navbar-nav .dropdown-menu .dropdown-item {
color: #4d8de5;
}
.navbar .navbar-nav .dropdown-menu .dropdown-item:hover,.navbar .navbar-nav .dropdown-menu .dropdown-item:focus,.navbar .navbar-nav .dropdown-menu .dropdown-item.active {
color: #1a71e8;
background-color: #4d535a;
}
.navbar .navbar-nav .dropdown-menu .dropdown-divider {
border-top-color: #4d535a;
}
.navbar .navbar-nav .nav-item.active .nav-link,.navbar .navbar-nav .nav-item.active .nav-link:hover,.navbar .navbar-nav .nav-item.active .nav-link:focus,.navbar .navbar-nav .nav-item.show .nav-link,.navbar .navbar-nav .nav-item.show .nav-link:hover,.navbar .navbar-nav .nav-item.show .nav-link:focus {
color: #1a71e8;
background-color: transparent;
}
.navbar .navbar-toggle {
border-color: #4d535a;
}
.navbar .navbar-toggle:hover,.navbar .navbar-toggle:focus {
background-color: #4d535a;
}
.navbar .navbar-toggle .navbar-toggler-icon {
color: #4d8de5;
}
.navbar .navbar-collapse,.navbar .navbar-form {
border-color: #4d8de5;
}
.navbar .navbar-link {
color: #4d8de5;
}
.navbar .navbar-link:hover {
color: #1a71e8;
}
@media (max-width: 575px) {
.navbar-expand-sm .navbar-nav .show .dropdown-menu .dropdown-item {
color: #4d8de5;
}
.navbar-expand-sm .navbar-nav .show .dropdown-menu .dropdown-item:hover,.navbar-expand-sm .navbar-nav .show .dropdown-menu .dropdown-item:focus {
color: #1a71e8;
}
.navbar-expand-sm .navbar-nav .show .dropdown-menu .dropdown-item.active {
color: #1a71e8;
background-color: #4d535a;
}
}
@media (max-width: 767px) {
.navbar-expand-md .navbar-nav .show .dropdown-menu .dropdown-item {
color: #4d8de5;
}
.navbar-expand-md .navbar-nav .show .dropdown-menu .dropdown-item:hover,.navbar-expand-md .navbar-nav .show .dropdown-menu .dropdown-item:focus {
color: #1a71e8;
}
.navbar-expand-md .navbar-nav .show .dropdown-menu .dropdown-item.active {
color: #1a71e8;
background-color: #4d535a;
}
}
@media (max-width: 991px) {
.navbar-expand-lg .navbar-nav .show .dropdown-menu .dropdown-item {
color: #4d8de5;
}
.navbar-expand-lg .navbar-nav .show .dropdown-menu .dropdown-item:hover,.navbar-expand-lg .navbar-nav .show .dropdown-menu .dropdown-item:focus {
color: #1a71e8;
}
.navbar-expand-lg .navbar-nav .show .dropdown-menu .dropdown-item.active {
color: #1a71e8;
background-color: #4d535a;
}
}
@media (max-width: 1199px) {
.navbar-expand-xl .navbar-nav .show .dropdown-menu .dropdown-item {
color: #4d8de5;
}
.navbar-expand-xl .navbar-nav .show .dropdown-menu .dropdown-item:hover,.navbar-expand-xl .navbar-nav .show .dropdown-menu .dropdown-item:focus {
color: #1a71e8;
}
.navbar-expand-xl .navbar-nav .show .dropdown-menu .dropdown-item.active {
color: #1a71e8;
background-color: #4d535a;
}
}
.navbar-expand .navbar-nav .show .dropdown-menu .dropdown-item {
color: #4d8de5;
}
.navbar-expand .navbar-nav .show .dropdown-menu .dropdown-item:hover,.navbar-expand .navbar-nav .show .dropdown-menu .dropdown-item:focus {
color: #1a71e8;
}
.navbar-expand .navbar-nav .show .dropdown-menu .dropdown-item.active {
color: #1a71e8;
background-color: #4d535a;
}
.nav-item.active {
border-top-left-radius: 5px;
border-bottom-left-radius: 5px;
border-top-right-radius: 5px;
border-bottom-right-radius: 5px;
border: 2px solid #1a71e8;
}
.btn-outline-success,.btn-outline-success:active,.btn-outline-success:visited {
background-color: transparent !important;
border-color: #4d8de5;
color: #4d8de5;
}
.btn-outline-success:hover {
background-color: transparent !important;
border-color: #1a71e8;
color: #1a71e8;
}
.btn-outline-success:focus {
box-shadow: 0 0 0 .2rem rgb(26,113,232)
}
.btn-outline-success.disabled,.btn-outline-success:disabled {
color: #1a71e8;
background-color: transparent
}
.btn-outline-success.dropdown-toggle {
color: #4d8de5;
background-color: #1a71e8;
border-color: #1a71e8
}
.btn-outline-success:not(:disabled):not(.disabled).active:focus,.btn-outline-success:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-success.dropdown-toggle:focus {
box-shadow: 0 0 0 .2rem rgb(26,232)
}
@media (min-width: 992px) {
.dropdown-menu .dropdown-toggle:after {
border-top: .3em solid transparent;
border-right: 0;
border-bottom: .3em solid transparent;
border-left: .3em solid;
}
.dropdown-menu .dropdown-menu {
margin-left: 0;
margin-right: 0;
}
.dropdown-menu li {
position: relative;
}
.nav-item .submenu {
display: none;
position: absolute;
left: 100%;
top: -7px;
}
.nav-item .submenu-left {
right: 100%;
left: auto;
}
.dropdown-menu>li:hover {
background-color: #f1f1f1
}
.dropdown-menu>li:hover>.submenu {
display: block;
}
}
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous">
<link rel="stylesheet" type="text/css" href="css/style.css" />
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js"></script>
<div id="page">
<nav class="navbar navbar-expand-lg navbar-dark bg-dark navbar-custom">
<a class="navbar-brand" href="#"><img src="images/logo5.png" alt="" style="width: 175px"></a>
<button class="navbar-toggler collapsed" type="button" data-toggle="collapse" data-target="#navbarsExample09" aria-controls="navbarsExample09" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div class="navbar-collapse collapse" id="navbarsExample09" style="">
<ul class="navbar-nav mr-auto">
<li class="nav-item active">
<a class="nav-link" href="#">Home <span class="sr-only">(current)</span></a>
</li>
<li class="nav-item dropdown">
<a class="nav-link dropdown-toggle" href="#" data-toggle="dropdown"> Platform </a>
<ul class="dropdown-menu dropdown-menu-right">
<li><a class="dropdown-item" href="#"> Dropdown item 1</a></li>
<li><a class="dropdown-item" href="#"> Dropdown item 2 </a></li>
<li><a class="dropdown-item dropdown-toggle" href="#"> Dropdown item 3 </a>
<ul class="submenu submenu-right dropdown-menu" data-toggle="dropdown">
<li><a class="dropdown-item" href="">Submenu item 1</a></li>
<li><a class="dropdown-item" href="">Submenu item 2</a></li>
<li><a class="dropdown-item" href="">Submenu item 3</a></li>
<li><a class="dropdown-item" href="">Submenu item 4</a></li>
</ul>
</li>
<li><a class="dropdown-item" href="#"> Dropdown item 4 </a></li>
</ul>
</li>
<li class="nav-item">
<a class="nav-link" href="#">Add new game</a>
</li>
</ul>
<ul class="navbar-nav ml-auto">
<form class="form-inline my-2 my-lg-0">
<input class="form-control mr-sm-2" type="search" placeholder="Search" aria-label="Search">
<button class="btn btn-outline-success my-2 my-sm-0" style="margin-right: 10px" type="submit">Search</button>
</form>
<li class="nav-item dropdown">
<a class="nav-link dropdown-toggle" href="#" id="navbarDropdown" role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
Account
</a>
<div class="dropdown-menu dropdown-menu-right" aria-labelledby="navbarDropdown">
<a class="dropdown-item" href="#">Action</a>
<a class="dropdown-item" href="#">Another action</a>
<div class="dropdown-divider"></div>
<a class="dropdown-item" href="#">Something else here</a>
</div>
</li>
</ul>
</div>
</nav>
</div>
编辑:我的JavaScript出现了问题。由于评论中的链接,对我有用的版本如下:
$( document ).ready( function () {
$( '.dropdown-menu a.dropdown-toggle' ).on( 'click',function ( e ) {
var $el = $( this );
var $parent = $( this ).offsetParent( ".dropdown-menu" );
if ( !$( this ).next().hasClass( 'show' ) ) {
$( this ).parents( '.dropdown-menu' ).first().find( '.show' ).removeClass( "show" );
}
var $subMenu = $( this ).next( ".dropdown-menu" );
$subMenu.toggleClass( 'show' );
$( this ).parent( "li" ).toggleClass( 'show' );
$( this ).parents( 'li.nav-item.dropdown.show' ).on( 'hidden.bs.dropdown',function ( e ) {
$( '.dropdown-menu .show' ).removeClass( "show" );
} );
if ( !$parent.parent().hasClass( 'navbar-nav' ) ) {
$el.next().css( { "top": $el[0].offsetTop,"left": $parent.outerWidth() - 4 } );
}
return false;
} );
} );
解决方法
如果您可以选择使用JavaScript解决方案,我想this answer of similar question会为您提供所需的东西。
这是未经修改的JavaScript代码段:
$('.dropdown-menu a.dropdown-toggle').on('click',function(e) {
if (!$(this).next().hasClass('show')) {
$(this).parents('.dropdown-menu').first().find('.show').removeClass('show');
}
var $subMenu = $(this).next('.dropdown-menu');
$subMenu.toggleClass('show');
$(this).parents('li.nav-item.dropdown.show').on('hidden.bs.dropdown',function(e) {
$('.dropdown-submenu .show').removeClass('show');
});
return false;
});
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。