我有包含许多元素的标准 bootstrap
菜单,当我更改屏幕大小时,我想将这些菜单元素移动到堆栈(其中有 3 行按钮)按钮中。
<nav class="navbar navbar-expand-md navbar-dark bg-dark mb-4">
<a class="navbar-brand" href="#">Top navbar</a>
<button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarCollapse" aria-controls="navbarCollapse" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarCollapse">
<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">
<a class="nav-link" href="#">Link</a>
</li>
<li class="nav-item">
<a class="nav-link disabled" href="#" tabindex="-1" aria-disabled="true">Disabled</a>
</li>
</ul>
<form class="form-inline mt-2 mt-md-0">
<input class="form-control mr-sm-2" type="text" placeholder="Search" aria-label="Search">
<button class="btn btn-outline-success my-2 my-sm-0" type="submit">Search</button>
</form>
</div>
</nav>
有人知道怎么做吗?
最佳答案
响应式 Bootstrap Navbar 只有两种“状态”...
- 折叠(垂直)
- 非折叠(水平)
navbar-expand-*
类用于改变两种状态之间的断点。
在您的情况下,您希望保持“非折叠”水平导航栏状态,但根据需要逐渐将导航项移动到折叠菜单。 Bootstrap 4 没有为此提供“开箱即用”的解决方案。
但是,使用 Bootstrap 下拉菜单和一些 jQuery 逻辑,您可以逐步将溢出的导航栏元素移至下拉菜单。这是我为此编写的 jQuery 逻辑:
var autocollapse = function (menu,maxHeight) {
var nav = $(menu);
var navHeight = nav.innerHeight();
if (navHeight >= maxHeight) {
$(menu + ' .dropdown').removeClass('d-none');
$(".navbar-nav").removeClass('w-auto').addClass("w-100");
while (navHeight > maxHeight) {
// add child to dropdown
var children = nav.children(menu + ' li:not(:last-child)');
var count = children.length;
$(children[count - 1]).prependTo(menu + ' .dropdown-menu');
navHeight = nav.innerHeight();
}
$(".navbar-nav").addClass("w-auto").removeClass('w-100');
}
else {
var collapsed = $(menu + ' .dropdown-menu').children(menu + ' li');
if (collapsed.length===0) {
$(menu + ' .dropdown').addClass('d-none');
}
while (navHeight < maxHeight && (nav.children(menu + ' li').length > 0) && collapsed.length > 0) {
// remove child from dropdown
collapsed = $(menu + ' .dropdown-menu').children('li');
$(collapsed[0]).insertBefore(nav.children(menu + ' li:last-child'));
navHeight = nav.innerHeight();
}
if (navHeight > maxHeight) {
autocollapse(menu,maxHeight);
}
}
}
演示:https://codeply.com/go/IETSah3bFG
这通过在调整屏幕大小(或加载页面)时检查导航栏的高度来实现。当高度增加时,导航元素已经换行,然后元素被移动到下拉列表中。当没有包装导航元素时,这些元素将从下拉列表中删除。
关于javascript - Bootstrap 导航栏在调整大小时隐藏菜单元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54693628/