Bootstrap navbar скрывает элементы меню при изменении размера - PullRequest
0 голосов
/ 14 февраля 2019

У меня есть стандартное меню 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 голосов
/ 14 февраля 2019

Отзывчивый Bootstrap Navbar имеет только два "состояния" ...

  • Свернутый (вертикальный)
  • Не свернутый (горизонтальный)

Класс 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"

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...