Отзывчивый 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"