How to make Twitter Bootstrap menu dropdown on hover rather than click

后端 未结 30 2632
小鲜肉
小鲜肉 2020-11-22 02:08

I\'d like to have my Bootstrap menu automatically drop down on hover, rather than having to click the menu title. I\'d also like to lose the little arrows next to the menu t

相关标签:
30条回答
  • 2020-11-22 02:18

    I created a pure on hover dropdown menu based on the latest (v2.0.2) Bootstrap framework that has support for multiple submenus and thought I'd post it for future users:

    body {
      padding-top: 60px;
      padding-bottom: 40px;
    }
    
    .sidebar-nav {
      padding: 9px 0;
    }
    
    .dropdown-menu .sub-menu {
      left: 100%;
      position: absolute;
      top: 0;
      visibility: hidden;
      margin-top: -1px;
    }
    
    .dropdown-menu li:hover .sub-menu {
      visibility: visible;
    }
    
    .dropdown:hover .dropdown-menu {
      display: block;
    }
    
    .nav-tabs .dropdown-menu,
    .nav-pills .dropdown-menu,
    .navbar .dropdown-menu {
      margin-top: 0;
    }
    
    .navbar .sub-menu:before {
      border-bottom: 7px solid transparent;
      border-left: none;
      border-right: 7px solid rgba(0, 0, 0, 0.2);
      border-top: 7px solid transparent;
      left: -7px;
      top: 10px;
    }
    
    .navbar .sub-menu:after {
      border-top: 6px solid transparent;
      border-left: none;
      border-right: 6px solid #fff;
      border-bottom: 6px solid transparent;
      left: 10px;
      top: 11px;
      left: -6px;
    }
    <link href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/2.3.2/css/bootstrap.min.css" rel="stylesheet" />
    
    <div class="navbar navbar-fixed-top">
      <div class="navbar-inner">
        <div class="container-fluid">
          <a data-target=".nav-collapse" data-toggle="collapse" class="btn btn-navbar">
            <span class="icon-bar"></span>
            <span class="icon-bar"></span>
            <span class="icon-bar"></span>
          </a>
          <a href="#" class="brand">Project name</a>
          <div class="nav-collapse">
            <ul class="nav">
              <li class="active"><a href="#">Home</a></li>
              <li><a href="#">Link</a></li>
              <li><a href="#">Link</a></li>
              <li><a href="#">Link</a></li>
              <li class="dropdown">
                <a data-toggle="dropdown" class="dropdown-toggle" href="#">Dropdown <b class="caret"></b></a>
                <ul class="dropdown-menu">
                  <li>
                    <a href="#">2-level Dropdown <i class="icon-arrow-right"></i></a>
                    <ul class="dropdown-menu sub-menu">
                      <li><a href="#">Action</a></li>
                      <li><a href="#">Another action</a></li>
                      <li><a href="#">Something else here</a></li>
                      <li class="divider"></li>
                      <li class="nav-header">Nav header</li>
                      <li><a href="#">Separated link</a></li>
                      <li><a href="#">One more separated link</a></li>
                    </ul>
                  </li>
                  <li><a href="#">Another action</a></li>
                  <li><a href="#">Something else here</a></li>
                  <li class="divider"></li>
                  <li class="nav-header">Nav header</li>
                  <li><a href="#">Separated link</a></li>
                  <li><a href="#">One more separated link</a></li>
                </ul>
              </li>
            </ul>
            <form action="" class="navbar-search pull-left">
              <input type="text" placeholder="Search" class="search-query span2">
            </form>
            <ul class="nav pull-right">
              <li><a href="#">Link</a></li>
              <li class="divider-vertical"></li>
              <li class="dropdown">
                <a class="#" href="#">Menu</a>
              </li>
            </ul>
          </div>
          <!-- /.nav-collapse -->
        </div>
      </div>
    </div>
    
    <hr>
    
    <ul class="nav nav-pills">
      <li class="active"><a href="#">Regular link</a></li>
      <li class="dropdown">
        <a href="#" data-toggle="dropdown" class="dropdown-toggle">Dropdown <b class="caret"></b></a>
        <ul class="dropdown-menu" id="menu1">
          <li>
            <a href="#">2-level Menu <i class="icon-arrow-right"></i></a>
            <ul class="dropdown-menu sub-menu">
              <li><a href="#">Action</a></li>
              <li><a href="#">Another action</a></li>
              <li><a href="#">Something else here</a></li>
              <li class="divider"></li>
              <li class="nav-header">Nav header</li>
              <li><a href="#">Separated link</a></li>
              <li><a href="#">One more separated link</a></li>
            </ul>
          </li>
          <li><a href="#">Another action</a></li>
          <li><a href="#">Something else here</a></li>
          <li class="divider"></li>
          <li><a href="#">Separated link</a></li>
        </ul>
      </li>
      <li class="dropdown">
        <a href="#">Menu</a>
      </li>
      <li class="dropdown">
        <a href="#">Menu</a>
      </li>
    </ul>

    Demo

    0 讨论(0)
  • 2020-11-22 02:18

    This works for WordPress Bootstrap:

    .navbar .nav > li > .dropdown-menu:after,
    .navbar .nav > li > .dropdown-menu:before {
        content: none;
    }
    
    0 讨论(0)
  • 2020-11-22 02:19

    I have published a proper plugin for the Bootstrap 3 dropdown hover functionality, in which you can even define what happens when clicking on the dropdown-toggle element (the click can be disabled):

    https://github.com/istvan-ujjmeszaros/bootstrap-dropdown-hover


    Why I made it when there are many solutions already?

    I had issues with all the previously existing solutions. The simple CSS ones are not using the .open class on the .dropdown, so there will be no feedback on the drop-down toggle element when the drop-down is visible.

    The js ones are interfering with clicking on .dropdown-toggle, so the dropdown shows up on hover, then hides it when clicking on an opened drop-down, and moving out the mouse will trigger the drop-down to show up again. Some of the js solutions are breaking iOS compatibility, some plugins are not working on modern desktop browsers which are supporting the touch events.

    That's why I made the Bootstrap Dropdown Hover plugin which prevents all these issues by using only the standard Bootstrap javascript API, without any hack. Even the Aria attributes are working fine with this plugin.

    0 讨论(0)
  • 2020-11-22 02:20

    I've used a bit of jQuery:

    // Add hover effect to menus
    jQuery('ul.nav li.dropdown').hover(function() {
      jQuery(this).find('.dropdown-menu').stop(true, true).delay(200).fadeIn();
    }, function() {
      jQuery(this).find('.dropdown-menu').stop(true, true).delay(200).fadeOut();
    });
    
    0 讨论(0)
  • 2020-11-22 02:21

    In addition to the answer from "My Head Hurts" (which was great):

    ul.nav li.dropdown:hover ul.dropdown-menu{
        display: block;    
    }
    

    There are 2 lingering issues:

    1. Clicking on the dropdown link will open the dropdown-menu. And it will stay open unless the user clicks somewhere else, or hovers back over it, creating an awkward UI.
    2. There is a 1px margin between the dropdown link, and dropdown-menu. This causes the dropdown-menu to become hidden if you move slowly between the dropdown and dropdown-menu.

    The solution to (1) is removing the "class" and "data-toggle" elements from the nav link

    <a href="#">
         Dropdown
         <b class="caret"></b>
    </a>
    

    This also gives you the ability to create a link to your parent page - which wasn't possible with the default implementation. You can just replace the "#" with whatever page you want to send the user.

    The solution to (2) is removing the margin-top on the .dropdown-menu selector

    .navbar .dropdown-menu {
        margin-top: 0px;
    }
    
    0 讨论(0)
  • 2020-11-22 02:21

    I've managed it as follows:

    $('ul.nav li.dropdown').hover(function(){
           $(this).children('ul.dropdown-menu').slideDown(); 
        }, function(){
           $(this).children('ul.dropdown-menu').slideUp(); 
    });
    

    I hope this helps someone...

    0 讨论(0)
提交回复
热议问题