调整大小时Bootstrap导航栏隐藏菜单元素

时间:2019-02-14 15:16:36

标签: javascript html css bootstrap-4

我有许多元素的标准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>

有人知道怎么做吗?

1 个答案:

答案 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

这可以通过在调整屏幕大小(或加载页面)时检查导航栏的高度来实现。当高度增加时,导航项将被包装,然后将项移至下拉菜单。如果没有包装的导航项目,则将这些项目从下拉列表中删除。


另请参阅:"Mashable" style navbar