Отсутствует раскрывающееся подменю начальной загрузки

Bootstrap 3 все еще находится в RC, но я просто пытался его реализовать. Я не мог понять, как поставить класс подменю. Даже в css нет класса, и даже в новых документах об этом ничего не говорится

Это было в 2.x с именем класса в виде выпадающего подменю


person DevC    schedule 02.08.2013    source источник
comment
Помните, что в версии 3 были изменены некоторые компоненты, включая меню, навигацию и модальные окна.   -  person Deividi Cavarzan    schedule 02.08.2013
comment
отсутствие встроенной поддержки этой (imho) полезной функции в BS3 - одна из основных причин, по которой я еще не переключился. хотя я согласен, что это не так полезно для мобильных устройств, и теперь у них есть подход «сначала мобильные», кажется недальновидным удалять функцию, которую они уже реализовали, которая ОЧЕНЬ полезна на рабочем столе   -  person Andrew Brown    schedule 06.02.2014
comment
Согласились, что недальновидно удалять ожидаемую функциональность. Такое критическое изменение создает для корпоративных разработчиков плохой день.   -  person RJB    schedule 14.07.2014
comment
Чтобы сделать раскрывающийся список, просто используйте css codepen.io/Gothburz/pen/GpJKqP   -  person Gothburz    schedule 25.10.2015


Ответы (8)


Решение @skelly хорошее, но не будет работать на мобильных устройствах, так как состояние зависания не будет работать.

Я добавил немного JS, чтобы вернуть поведение BS 2.3.2.

PS: он будет работать с CSS, который вы получите: http://bootply.com/71520, хотя вы можете прокомментировать следующую часть:

CSS:

/*.dropdown-submenu:hover>.dropdown-menu{display:block;}*/

JS:

$('ul.dropdown-menu [data-toggle=dropdown]').on('click', function(event) {
  // Avoid following the href location when clicking
  event.preventDefault();
  // Avoid having the menu to close when clicking
  event.stopPropagation();
  // If a menu is already open we close it
  $('ul.dropdown-menu [data-toggle=dropdown]').parent().removeClass('open');
  // opening the one you clicked on
  $(this).parent().addClass('open');
});

Результат можно найти в моей теме WordPress (вверху страницы): http://shprinkone.julienrenaux.fr/

person Shprink    schedule 08.09.2013
comment
Ты самый умный парень в этом посте - person user1143669; 12.12.2014
comment
Это решение не учитывает желание сохранить функциональность наведения на рабочем столе, а также не работает для второго уровня подменю. Чтобы это работало для большего количества уровней подменю, измените последние две строки на следующую строку: $(this).closest(".dropdown-submenu").toggleClass("open");, которая будет открывать / закрывать пункты меню ссылок. Чтобы удерживать наведение на рабочем столе, необходимо проверить ширину области просмотра браузеров, и она будет отличаться для каждого сайта. - person edhedges; 19.11.2015
comment
спасибо за ваш код. но в мобильном телефоне в вашем коде есть ошибка. - person jian dan; 06.04.2017

До сегодняшнего дня (9 января 2014 г.) Bootstrap 3 по-прежнему не поддерживает раскрывающееся меню подменю.

Я поискал в Google об адаптивном меню навигации и обнаружил, что это лучший вариант.

Это Умное меню http://www.smartmenus.org/.

Надеюсь, это выход для всех, кому нужно навигационное меню с многоуровневым подменю.

обновление 2015-02-17 Умные меню теперь полностью поддерживают стиль элемента Bootstrap для подменю. Для получения дополнительной информации посетите веб-сайт «Умное меню».

person vee    schedule 09.01.2014
comment
У меня возникли проблемы с попыткой заставить bootstrap зависать на ПК и нажимать на планшете с несколькими уровнями. Вы только что сделали мой день! Прекрасно работает - использует почти ту же разметку, что и bootstrap. Спасибо! :) - person Hippie; 24.01.2014
comment
Это бесплатное решение с открытым исходным кодом и очень хорошо работает с BootStrap 3. - person Patrick Desjardins; 01.04.2014
comment
Удивительный! Легкий! Подробные сведения об интеграции с Bootstrap 3 см. Здесь: vadikom.github.io /smartmenus/src/demo/bootstrap-navbar.html - person manafire; 03.07.2014
comment
Smartmenus - это хорошо, но работает только с панелями навигации, а не с раскрывающимися списками простых кнопок. - person Nikolai Prokoschenko; 12.09.2014
comment
Это решает проблему, делает меню совместимыми при наведении и касании и требует только HTML-разметки Bootstrap 3 по умолчанию. ‹Отличное решение, прозрачное и быстрое в реализации! - person Jpsy; 09.12.2014
comment
ты сохранил мой проект :-) - person Sikander; 23.01.2015
comment
Это должен быть новый принятый ответ. Просто реализовал это, и это без проблем. - person Lunyx; 06.11.2016
comment
@Lunyx Ответ ZimSystem тоже очень хорош. Больше ничего скачивать не нужно. Выбирайте, что вам нравится. :-) - person vee; 06.11.2016
comment
@vee Я пробовал его примеры, но мне не удалось заставить их работать с правильным поведением на мобильных и настольных компьютерах. Либо он был наведен на оба, либо щелкнул на обоих. Вероятно, это более простое решение, но, как таковое, оно кажется более ограниченным, и лично я предпочел бы придерживаться кода, который имеет документацию и не требует дополнительных взломов, чтобы заставить его работать должным образом. - person Lunyx; 06.11.2016

Код Shprink помог мне больше всего, но, чтобы раскрывающийся список не уходил за пределы экрана, я обновил его до:

JS:

$('ul.dropdown-menu [data-toggle=dropdown]').on('click', function(event) {
    // Avoid following the href location when clicking
    event.preventDefault(); 
    // Avoid having the menu to close when clicking
    event.stopPropagation(); 
    // If a menu is already open we close it
    $('ul.dropdown-menu [data-toggle=dropdown]').parent().removeClass('open');
    // opening the one you clicked on
    $(this).parent().addClass('open');

    var menu = $(this).parent().find("ul");
    var menupos = $(menu).offset();

    if (menupos.left + menu.width() > $(window).width()) {
        var newpos = -$(menu).width();
        menu.css({ left: newpos });    
    } else {
        var newpos = $(this).parent().width();
        menu.css({ left: newpos });
    }

});

CSS: FROM background-color: #eeeeee TO background-color: # c5c5c5 - белый шрифт и светлый фон выглядели не очень хорошо.

.nav .open > a,
.nav .open > a:hover,
.nav .open > a:focus {
  background-color: #c5c5c5;
  border-color: #428bca;
}

Я надеюсь, что это поможет людям так же, как и мне!

Но я надеюсь, что Bootstrap как можно скорее вернет функцию подпрограмм.

person WHOMEZz    schedule 29.09.2013

Комментарий к действительно полезному обходному пути Скелли: в Bootstrap-sass 3.3.6, utilities.scss, строка 19: .pull-left имеет float:left !important. С тех пор я также рекомендую использовать! Important в его CSS:

.dropdown-submenu.pull-left {
    float:none !important;
}
person bencergazda    schedule 13.01.2016

Я столкнулся с этой проблемой несколько дней назад. Я пробовал много решений, и ни одно из них не помогло мне, в конце концов, я создал расширение / переопределение выпадающего кода начальной загрузки. Это копия исходного кода с изменениями функции closeMenus.

Я думаю, что это хорошее решение, поскольку оно не влияет на основные классы bootstrap js.

Вы можете проверить это на gihub: https://github.com/djokodonev/bootstrap-multilevel-dropdown

person George Donev    schedule 17.02.2014
comment
Это очень хорошее решение для многоуровневого выпадающего списка, мне нравится его использовать. - person huncyrus; 01.12.2014
comment
Рад, что вам понравилось :-) - person George Donev; 02.12.2014

С Bootstrap 5 теперь очень легко реализовать раскрывающееся подменю без использования какого-либо кода javascript благодаря новой опции autoClose.

Живая демонстрация: https://jsfiddle.net/42rx6sqp/

.dropdown-menu .dropdown-menu {
  transform: none !important;
  top: -.5rem !important;
  left: 100% !important;
}
<div class="dropdown m-5">
  <a class="btn btn-secondary dropdown-toggle" href="#" role="button" id="dropdownMenuLink" data-bs-toggle="dropdown" data-bs-auto-close="outside" aria-expanded="false">
    Dropdown link
  </a>
  <ul class="dropdown-menu" aria-labelledby="dropdownMenuLink">
    <li class="dropdown">
      <a class="dropdown-item" href="#" id="dropdownSubMenuLink" data-bs-toggle="dropdown" aria-expanded="false">Submenu Action</a>
      <ul class="dropdown-menu" aria-labelledby="dropdownSubMenuLink">
        <li><a class="dropdown-item" href="#">Another action</a></li>
        <li><a class="dropdown-item" href="#">Something else here</a></li>
      </ul>
    </li>
  </ul>
</div>
person Seb33300    schedule 17.06.2021

Я делаю другое решение для выпадающего списка. Надеюсь, это будет полезно. Просто добавьте этот скрипт js.

<script type="text/javascript"> jQuery("document").ready(function() {
  jQuery("ul.dropdown-menu > .dropdown.parent").click(function(e) {
    e.preventDefault();
    e.stopPropagation();
    if (jQuery(this).hasClass('open2'))
      jQuery(this).removeClass('open2');
    else {
      jQuery(this).addClass('open2');
    }

  });
}); < /script>

<style type="text/css">.open2{display:block; position:relative;}</style>
person user3193801    schedule 14.01.2014

person    schedule
comment
Вот руководство по обновлению / миграции Bootstrap 3: bootply.com/bootstrap-3-migration-guide < / а> - person Zim; 07.08.2013
comment
На самом деле он работает, но я использую его в wordpress, и это была проблема с неправильным порядком постановки стилей в очередь. - person lonerunner; 16.01.2014
comment
Например, bootply.com/86684, добавьте следующую строку в css для правильного фонового наведения курсора на элемент родительского меню при отображении подменю: .dropdown-submenu:hover {background: #e2e1e1;} - person Eduardo Moralles; 22.01.2014
comment
Также работает с 3.1.1. Большое спасибо за решение. Я бился головой об стену, пытаясь изменить файл bootstrap.js, чтобы он работал правильно. - person Joel Kinzel; 29.04.2014
comment
В решение добавлен css / разметка. Действительно полезный ответ, было бы обидно видеть, как ссылка опускается. а также скрипка - person Loktar; 22.07.2014
comment
Повозился с версией 3.2.0. Выяснилось, что он несовместим с модулем начальной загрузки angular ui: angular-ui.github.io/bootstrap < / а> - person Fandi Susanto; 08.09.2014
comment
Для навигационного права мне нужно было добавить right: auto; в .dropdown-submenu ›.dropdown-menu, потому что иногда подменю недостаточно для размещения ссылок. Это связано с тем, что Bootstrap добавляет right: 1 в .nav-right .dropdown-menu - person Hawkee; 14.11.2014
comment
Я пробовал примеры загрузки [bootply.com/92442] и [bootply.com/J2vCTTfm9p], они работают во всплывающем окне bootply, но ни в полноэкранном режиме предварительного просмотра, ни на смартфоне / мобильном устройстве. предварительный просмотр устройства. При нажатии на «Очистить поплавки» подменю не появляется, но меню закрывается. То же и у меня. Есть идеи, почему? - person Tibor Nagy; 08.06.2015
comment
Я стараюсь максимально упростить вещи, но это необходимо на крупных веб-сайтах, где нет возможности обходить несколько уровней навигации (например, на государственных сайтах). - person Troy Templeman; 19.12.2017
comment
Подменю исчезают даже до того, как я могу навести на него указатель мыши, поэтому наведение не работает! Он не зависает, полагаясь на щелчок, хотя работает нормально. - person Polv; 29.07.2018
comment
Хорошо, мой вариант заставить работать наведение: codeply.com/go/nx97JyPRF7 Обратите внимание, что в мой настоящий проект, мне не нужно setTimeout( , 100) - person Polv; 29.07.2018
comment
как я могу сделать второй ul и другие все ul меню рядом с одинаковой высотой? на той же высоте, что и первое подменю? - person missCEREN; 26.02.2020