【问题标题】:How to open dropdown on hover in bootstrap 4如何在引导程序 4 中悬停时打开下拉菜单
【发布时间】:2018-03-18 04:20:02
【问题描述】:

现在我的导航下拉菜单可以在点击时打开。

我希望它在悬停时打开。我该怎么做?

【问题讨论】:

  • 您想在点击时打开?或者你没有?不清楚你的问题
  • 我想他只是想像这样在悬停时打开下拉菜单:codepen.io/bsngr/pen/frDqh
  • @Hkachhia 我想在悬停时打开。

标签: html css bootstrap-4


【解决方案1】:

只需添加以下 css

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

fiddle

.dropdown:hover>.dropdown-menu {
  display: block;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-alpha.6/js/bootstrap.min.js"></script>
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-alpha.6/css/bootstrap.min.css" rel="stylesheet"/>
   <nav class="navbar navbar-toggleable-md navbar-light bg-faded">
 
<ul class="navbar-nav">

  <li class="nav-item dropdown">
    <a class="nav-link dropdown-toggle" href="" id="navbarDropdownMenuLink" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
      Dropdown link
    </a>
    <div class="dropdown-menu" aria-labelledby="navbarDropdownMenuLink">
      <a class="dropdown-item" href="#">Action</a>
      <a class="dropdown-item" href="#">Another action</a>
      <a class="dropdown-item" href="#">Something else here</a>
    </div>
  </li>
</ul>
</nav>

【讨论】:

  • 它还有助于在 主上添加一些 padding-bottom: 0.5rem; 以保持下拉部署更多时间(鼠标移动有时会影响它)
  • 注意html id名字不能是驼峰式
【解决方案2】:

Znaneswar 的 css 效果很好,但我也会添加这一行。

.dropdown-menu {
  margin: -0.125rem 0 0;
}

下拉菜单与产生下拉菜单的元素相距 0.125rem。因此,当您将鼠标悬停在该间隙上时,您将很难从链接导航到下拉列表而不消失。

如果您希望下拉链接实际上也是一个链接,只需从 a 标记中删除此属性

data-toggle="dropdown"

【讨论】:

    【解决方案3】:

    下面的 css 工作正常

    .dropdown:hover>.dropdown-menu {
        display: block;
    }
    .dropdown>.dropdown-toggle:active {
        pointer-events: none;   // Add this, to prevent clicking dropdown's default click function
    }
    

    【讨论】:

      【解决方案4】:
      <div class="dropdown">
      ...
      </div>
      

      你可以用 jQuery 试试这个:

      $(".dropdown").hover(function(){
      $(this).addClass("show");
      });
      

      【讨论】:

      • 我没有得到反对票。 OP 没有要求仅使用 CSS 的解决方案。
      • 我认为这个解决方案不会起作用,因为它添加了一个类,但是当元素不再处于悬停效果时它不会删除它
      【解决方案5】:

      我使用 Angular 和 ng-bootstrap 和 bootstratp 得到了这个解决方案:

      CSS:

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

      HTML:

            <li class="nav-item dropdown" ngbDropdown>
              <a class="nav-link h5 dropdown-toggle" id="navbarDropdown" ngbDropdownToggle>
                Parent</a>
                <div ngbDropdownMenu class="dropdown-menu">
                  <a class="dropdown-item" href="#" ngbDropdownItem>Child1</a>
                  <a class="dropdown-item" href="#" ngbDropdownItem>Child2</a>
                </div>
            </li>
      

      所以,如果不使用 CSS 属性,下拉菜单只会在点击父链接时出现。

      【讨论】:

        【解决方案6】:

        虽然我很欣赏这个问题的答案,但给出的答案似乎并不是最好的。这是因为这些答案无视可访问性。

        请注意,当仅使用 CSS 使下拉菜单显示在 .nav-link 悬停时,.nav-link 元素上的 aria-expanded 参数不会更改为 true。

        您必须使用一些 JS 才能拥有完整的可访问性功能。

        以下是我想出的解决方法。

        // header_scripts.js
        
        $('body').on('hover', '.nav-item.dropdown', function() {
            $(this).find('.dropdown-toggle').dropdown('toggle');
        });
        
        
        /* header.css */
        
        .dropdown-menu {
            margin: 0 0 0 0;
        }
        

        上述代码应该提供您在此问题的其他答案中看到的相同功能,但存在完全可访问性问题。

        我给出的 CSS 非常笼统,而且特异性很低,因此请按照您认为合适的方式使用。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-01-05
          • 2020-07-15
          • 1970-01-01
          • 2013-10-10
          • 2014-08-30
          • 1970-01-01
          相关资源
          最近更新 更多