Bootstrap下拉子菜单丢失

Dev*_*evC 317 css submenu twitter-bootstrap twitter-bootstrap-3

Bootstrap 3仍然在RC,但我只是想实现它.我无法弄清楚如何放置子菜单类.即使css中没有课程,甚至新的文档也没有说出任何关于它的内容

在2.x中有类名作为dropdown-submenu

Zim*_*Zim 543

2018年更新

dropdown-submenu自举3 RC已被删除.用Bootstrap作者Mark Otto的话来说..

"子菜单现在在网络上没有多少地方,特别是移动网络.它们将被移除3.0" - https://github.com/twbs/bootstrap/pull/6342

但是,通过一些额外的CSS,您可以获得相同的功能.

Bootstrap 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;
}
Run Code Online (Sandbox Code Playgroud)

Navbar子菜单下拉菜单悬停
Navbar子菜单下拉菜单悬停(右对齐)
Navbar子菜单下拉菜单单击(右对齐)
Navbar下拉菜单悬停(无子菜单)


Bootstrap 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;
}
Run Code Online (Sandbox Code Playgroud)

样本标记

<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>
Run Code Online (Sandbox Code Playgroud)

PS - 调整左侧位置的导航栏示例:http://bootply.com/92442

  • 例如http://bootply.com/86684,在显示子菜单时,在css中添加以下行以显示父菜单项的正确背景悬停:`.dropdown-submenu:hover {background:#e2e1e1;}` (8认同)
  • 是的,谢谢我已经添加了我的主题样式表,只是复制粘贴旧版本的bootstrap http://wordpress.org/themes/bikaner (5认同)
  • 我只是想尽可能地简化事情,但是在大型网站上需要这样做而不能绕过多层次的导航(例如政府网站). (2认同)

Shp*_*ink 61

@skelly解决方案很好但不能在移动设备上运行,因为悬停状态不起作用.

我添加了一些JS来恢复BS 2.3.2的行为.

PS:它可以与您到达的CSS一起使用:http://bootply.com/71520虽然您可以评论以下部分:

CSS:

/*.dropdown-submenu:hover>.dropdown-menu{display:block;}*/
Run Code Online (Sandbox Code Playgroud)

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');
});
Run Code Online (Sandbox Code Playgroud)

结果可以在我的WordPress主题上找到(页面顶部):http://shprinkone.julienrenaux.fr/

  • 你是这篇文章中最聪明的人 (5认同)
  • 此解决方案不考虑在桌面上保留悬停功能,也不适用于第二级子菜单.为了使更多级别的子菜单工作,将最后两行更改为以下行:`$(this).closest(".dropdown-submenu").toggleClass("open");`,将打开/关闭链接菜单项.为了将鼠标悬停在桌面上,必须检查浏览器视口宽度,并且每个站点都有所不同. (2认同)

vee*_*vee 42

直到今天(2014年1月9日),Bootstrap 3仍然不支持子菜单下拉列表.

我在谷歌搜索了响应式导航菜单,发现这是我最好的.

这是智能菜单 http://www.smartmenus.org/

我希望这是任何想要使用多级子菜单的导航菜单的人的出路.

更新2015-02-17智能菜单现在完全支持子菜单的Bootstrap元素样式.有关更多信息,请查看智能菜单网站.

  • 惊人!简单!有关Bootstrap 3集成的具体细节,请参见此处:http://vadikom.github.io/smartmenus/src/demo/bootstrap-navbar.html (5认同)
  • 这个解决方案是免费的,开源的,并且与BootStrap 3配合得很好. (2认同)
  • 智能菜单很好,但它只适用于导航栏,不适用于简单的按钮下拉菜单。 (2认同)

Seb*_*300 8

在 Bootstrap 5 中,由于新的autoClose选项和dropend类,现在无需使用任何 JavaScript 代码即可轻松实现下拉子菜单。

现场演示: https: //jsfiddle.net/b038kc2y/

.dropdown-menu .dropdown-menu {
  top: -.5rem !important;
}
Run Code Online (Sandbox Code Playgroud)
<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="dropend">
      <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>
Run Code Online (Sandbox Code Playgroud)

  • 你不需要使用CSS。只需将 `dropend` 类添加到第一个 li 即可。看看https://jsfiddle.net/tmedxnLq/ (3认同)

WHO*_*EZz 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 });
    }

});
Run Code Online (Sandbox Code Playgroud)

CSS: FROM background-color: #eeeeee TO background-color: #c5c5c5 - white font & light background wasn't looking good.

.nav .open > a,
.nav .open > a:hover,
.nav .open > a:focus {
  background-color: #c5c5c5;
  border-color: #428bca;
}
Run Code Online (Sandbox Code Playgroud)

I hope this helps people as much as it did for me!

But i hope Bootstrap add the subs feature back ASAP.

  • 嗯..我无法让这个工作. (3认同)