我有许多元素的标准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>
有人知道怎么做吗?
答案 0 :(得分:0)
自适应Bootstrap导航栏只有两个“状态” ...
navbar-expand-*
类用于更改两个状态之间的断点。
在您的情况下,您希望保持“非折叠”水平Navbar状态,但是根据需要逐渐将导航项移动到折叠菜单。 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://www.codeply.com/go/IETSah3bFG
这可以通过在调整屏幕大小(或加载页面)时检查导航栏的高度来实现。当高度增加时,导航项将被包装,然后将项移至下拉菜单。如果没有包装的导航项目,则将这些项目从下拉列表中删除。