Bootstrap 导航栏下拉子菜单在折叠模式下不起作用
Posted
技术标签:
【中文标题】Bootstrap 导航栏下拉子菜单在折叠模式下不起作用【英文标题】:Bootstrap navbar dropdown submenu not working in collapsed mode 【发布时间】:2021-01-16 00:50:32 【问题描述】:我正在建立一个新网站,但我的导航栏卡住了。
我面临的问题是子菜单(第二级下拉菜单)没有以折叠模式显示。如果你按下它像正常的下拉菜单一样打开它,它就好像它本身就是一个链接,而不是打开子菜单。
在全屏模式下,它按预期工作,但在悬停而不是点击时。
.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, 113, 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" 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 是问题所在。感谢 cmets 中的链接,对我有用的版本如下:
$( 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;
);
);
【问题讨论】:
【参考方案1】:如果您可以选择 JavaScript 解决方案,我认为 this answer of similar question 可以满足您的需求。
这是未经修改的 JavaScript sn-p:
$('.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;
);
【讨论】:
谢谢!这本身不起作用,但另一个问题的链接有一个对我有用的版本。似乎我的问题是我的 javascript 无法正常工作,我忘记发布了,因为我认为这主要是一个 css 问题以上是关于Bootstrap 导航栏下拉子菜单在折叠模式下不起作用的主要内容,如果未能解决你的问题,请参考以下文章
如何在折叠的导航栏中默认打开 Bootstrap 3 下拉菜单
Bootstrap:单击菜单外部时如何关闭打开的折叠导航栏?