Відсутнє підменю завантажувального завантажувача


324

Bootstrap 3 все ще знаходиться в RC, але я просто намагався його реалізувати. Я не міг зрозуміти, як поставити клас підменю. Навіть немає класу в css і навіть нові документи про це нічого не говорять

Він був там у 2.x із назвою класу як спадне підменю


2
Пам'ятайте, що деякі компоненти змінилися у версії 3, включаючи меню, навички та модалі.
Дейвідi Каварзан

11
відсутність вбудованої підтримки для цієї (імхо) корисної функції в BS3 є однією з головних причин, за якими я ще не перейшов. хоча я погоджуюсь, що це не так корисно для мобільних пристроїв, і зараз у них підхід "перший для мобільних пристроїв", здається, короткозорий вилучити функцію, яку вони вже реалізували, тобто ДУЖЕ корисний на робочому столі
Ендрю Браун

4
Домовились, що видалити очікувану функціональність досить недалеко. Така різка зміна дає розробникам підприємств поганий день.
RJB

Щоб зробити спадне меню, просто використовуйте css codepen.io/Gothburz/pen/GpJKqP
Gothburz

Відповіді:


555

Оновлено 2018 рік

Файл dropdown-submenuвидалено в Bootstrap 3 RC. Слова автора Bootstrap Марка Отто ..

"Підменю просто немає місця в Інтернеті зараз, особливо в мобільній мережі. Їх буде видалено з 3.0" - https://github.com/twbs/bootstrap/pull/6342

Але, маючи додатковий CSS, ви можете отримати той самий функціонал.

Завантажувальна програма 4 (підменю навігації на курсорі наведення курсора)

.navbar-nav li:hover > ul.dropdown-menu {
    display: block;
}
.dropdown-submenu {
    position:relative;
}
.dropdown-submenu>.dropdown-menu {
    top:0;
    left:100%;
    margin-top:-6px;
}

Панель навігації підменю
Navbar Підвідна панель підменю Навбар (вирівнюється праворуч)
Клацень, що випадає підменю Навбар (вирівнюється праворуч)
Наведіть курсор спаду Навбар (немає підменю)


Завантаження 3

Ось приклад, який використовує 3.0 RC 1: http://bootply.com/71520

Ось приклад, який використовує Bootstrap 3.0.0 (остаточний): http://bootply.com/86684

CSS

.dropdown-submenu {
    position:relative;
}
.dropdown-submenu>.dropdown-menu {
    top:0;
    left:100%;
    margin-top:-6px;
    margin-left:-1px;
    -webkit-border-radius:0 6px 6px 6px;
    -moz-border-radius:0 6px 6px 6px;
    border-radius:0 6px 6px 6px;
}
.dropdown-submenu:hover>.dropdown-menu {
    display:block;
}
.dropdown-submenu>a:after {
    display:block;
    content:" ";
    float:right;
    width:0;
    height:0;
    border-color:transparent;
    border-style:solid;
    border-width:5px 0 5px 5px;
    border-left-color:#cccccc;
    margin-top:5px;
    margin-right:-10px;
}
.dropdown-submenu:hover>a:after {
    border-left-color:#ffffff;
}
.dropdown-submenu.pull-left {
    float:none;
}
.dropdown-submenu.pull-left>.dropdown-menu {
    left:-100%;
    margin-left:10px;
    -webkit-border-radius:6px 0 6px 6px;
    -moz-border-radius:6px 0 6px 6px;
    border-radius:6px 0 6px 6px;
}

Розмітка зразка

<div class="navbar navbar-default navbar-fixed-top" role="navigation">
    <div class="container">
        <div class="navbar-header">
            <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-ex1-collapse">  
                <span class="sr-only">Toggle navigation</span>
                <span class="icon-bar"></span>
                <span class="icon-bar"></span>
                <span class="icon-bar"></span>
            </button>
        </div>
        <div class="collapse navbar-collapse navbar-ex1-collapse">
            <ul class="nav navbar-nav">
                <li class="menu-item dropdown">
                    <a href="#" class="dropdown-toggle" data-toggle="dropdown">Drop Down<b class="caret"></b></a>
                    <ul class="dropdown-menu">
                        <li class="menu-item dropdown dropdown-submenu">
                            <a href="#" class="dropdown-toggle" data-toggle="dropdown">Level 1</a>
                            <ul class="dropdown-menu">
                                <li class="menu-item ">
                                    <a href="#">Link 1</a>
                                </li>
                                <li class="menu-item dropdown dropdown-submenu">
                                    <a href="#" class="dropdown-toggle" data-toggle="dropdown">Level 2</a>
                                    <ul class="dropdown-menu">
                                        <li>
                                            <a href="#">Link 3</a>
                                        </li>
                                    </ul>
                                </li>
                            </ul>
                        </li>
                    </ul>
                </li>
            </ul>
        </div>
    </div>
</div>

PS - Приклад у навігаційній панелі, що регулює положення ліворуч: http://bootply.com/92442


5
Так, дякую, я додав його до таблиці стилів моєї теми, просто скопіюйте вставлену з старої версії bootstrap wordpress.org/themes/bikaner
DevC

8
Наприклад, bootply.com/86684 , додайте наступний рядок у css, щоб правильно відобразити фоновий елемент батьківського меню під час відображення підменю: .dropdown-submenu:hover {background: #e2e1e1;}
Eduardo Moralles

1
Працює і з 3.1.1. Велике спасибі за рішення. Я бив головою об стіну, намагаючись змінити файл bootstrap.js для нормальної роботи.
Джоель Кінзель

2
Я все намагаюся максимально спростити речі, але є потреба в цьому на великих веб-сайтах, які не можуть обійтися різними рівнями навігації (наприклад, урядовими веб-сайтами).
Тройський Темплмен

1
Підменю зникає навіть до того, як я зможу перенести на нього мишу, тому наведення миші не працює! Він не наближається, покладаючись на клацання, проте працює добре, хоча.
Полв

61

@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/


5
Ви найрозумніший хлопець у цій публікації
користувач1143669

2
Це рішення не враховує прагнення зберегти функціональність наведення на робочому столі, а також не працює для другого рівня підменю. Для того, щоб це працювало для більше рівнів підменю, змініть останні два рядки на наступний рядок:, $(this).closest(".dropdown-submenu").toggleClass("open");який відкриє / закриє пункти меню посилань. Щоб зберегти наведення на робочий стіл, необхідно перевірити ширину вікна перегляду браузерів і буде відрізнятися для кожного сайту.
краями

дякую за Ваш код але в мобільному телефоні ваш код має помилку.
jian dan

42

До сьогодні (9 січня 2014 р.) Bootstrap 3 досі не підтримує спадне підменю.

Я шукав Google про чуйне меню навігації і виявив, що це найкраще, хоча я.

Це розумні меню http://www.smartmenus.org/

Я сподіваюся, що це вихід для всіх, хто хоче навігаційне меню з підрівневим підрівнем.

оновлення 2015-02-17 Інтелектуальні меню тепер повністю підтримують стиль елемента Bootstrap для підменю. Для отримання додаткової інформації відвідайте веб-сайт Smart меню.


У мене виникли проблеми, намагаючись заставити завантажувальний засіб навести на ПК та натиснути на планшет із кількома рівнями. Ви щойно зробили мій день! Працює прекрасно - Використовує майже таку ж розмітку, як і завантажувальний. Дякую! :)
Хіпі

2
Це рішення є безкоштовним, відкритим кодом та дуже добре працює з BootStrap 3.
Патрік

5
Дивовижний! Легко! Детальні відомості про інтеграцію Bootstrap 3 див. Тут: vadikom.github.io/smartmenus/src/demo/bootstrap-navbar.html
manafire

1
Smartmenus приємний, проте він працює лише з навігаційними панелями, а не з простими спаданнями кнопок.
Микола Прокощенко

1
u зберегли мій проект :-)
Sikander

5

Код 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: З фонового кольору: #eeeeee ДО кольору фону: # c5c5c5 - білий шрифт та світлий фон виглядають не дуже добре.

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

Я сподіваюся, що це допомагає людям так само, як і для мене!

Але я сподіваюся, що Bootstrap додасть функцію підсилки якнайшвидше.


4

Прокоментуйте дійсно корисне рішення Skelly : у Bootstrap-sass 3.3.6, utilities.scss, рядок 19: .pull-leftмає float:left !important. З цього моменту я рекомендую використовувати! Важливо і в його CSS:

.dropdown-submenu.pull-left {
    float:none !important;
}

2

Я зіткнувся з цим питанням кілька днів тому. Я спробував багато рішень, і жодне насправді не працювало для мене, врешті-решт я створив розширення / перезапис випадаючого коду завантажувальної програми. Це копія оригінального коду зі змінами функції closeMenus.

Я думаю, що це хороше рішення, оскільки воно не впливає на основні класи завантажувального js.

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


Це дуже хороше рішення для багаторівневого випадання, я люблю його використовувати.
huncyrus

Я радий, що вам сподобалось :-)
Георгій Донев

-2

Я приймаю ще одне рішення для випадання. Сподіваюся, що це корисно Просто додайте цей сценарій 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>
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.