【问题标题】:Allow click on twitter bootstrap dropdown toggle link?允许点击 twitter bootstrap 下拉切换链接?
【发布时间】:2012-09-19 18:12:47
【问题描述】:

我们已将 twitter 引导下拉菜单设置为在悬停时工作(而不是单击 [是的,我们知道触摸设备上没有悬停])。但是我们希望能够在单击主链接时使其正常工作。

默认情况下,twitter bootstrap 会阻止它,那么我们如何重新启用它呢?

【问题讨论】:

    标签: drop-down-menu hyperlink twitter-bootstrap


    【解决方案1】:

    只需将 disabled 添加为锚上的类:

    <a class="dropdown-toggle disabled" href="http://google.com">
        Dropdown <b class="caret"></b></a>
    

    总之就是这样:

    <ul class="nav">
        <li class="dropdown">
            <a class="dropdown-toggle disabled" href="http://google.com">
                Dropdown <b class="caret"></b>
            </a>
            <ul class="dropdown-menu">
                <li><a href="#">Link 1</a></li>
                <li><a href="#">Link 2</a></li>
            </ul>
        </li>
    </ul>
    

    【讨论】:

    • 嗯,主菜单项通过这种方式变得可点击,但子菜单不会下拉。没错,我希望通过单击插入符号来显示子菜单项,而不是像 Hailwood 那样通过悬停来显示。
    • +1。很好的解决方案,在引导文档中没有看到,所以感谢您指出 disabled 属性。
    • 这对我现在不起作用,尽管添加了类:&lt;nav class="nav-main mega-menu"&gt; &lt;ul id="topMain" class="nav nav-pills nav-main scroll-menu"&gt; &lt;li id="dropdown-menu-home"&gt; &lt;li id="about" class="dropdown active"&gt; &lt;a class="dropdown-toggle disabled" href="/about/"&gt; &lt;ul class="dropdown-menu"&gt; &lt;/li&gt; 它仍然处于非活动状态,无法单击。我正在使用 bootstrap 3 和基于它的主题。
    • 为了解决“触摸时不能悬停”的问题,我使用 modernizr 为 html 元素添加了一个非触摸类。然后我添加了允许下拉菜单在悬停时打开的样式。我仅通过 js 将禁用类添加到具有来自modernizr 的非触摸类的设备。这样,对于实际获得正常导航的大型触摸设备,下拉菜单将按照引导程序的预期工作。但是对于非触摸设备,老式的悬停下拉菜单取代了引导程序的 clicky 解决方案。在我看来,这是两全其美的。
    【解决方案2】:

    另一种解决方案是从锚点中删除“下拉切换”类。此点击后将不再触发 dropwon.js,因此您可能希望子菜单在悬停时显示。

    【讨论】:

    • 但是智能手机上没有悬停,或者“根本没有”。您需要以某种方式单击该项目以使其下拉。
    • 好吧,Galaxy S3 可以检测到悬停的手指。但世界还没有为此做好准备。 :)
    • 对我们来说,在移动设备上显示下拉菜单并不重要,因此该解决方案有效。
    【解决方案3】:

    对于那些抱怨“子菜单不下拉”的人,我以这种方式解决了它,这对我来说看起来很干净:

    1) 除了你的

    <a class="dropdown-toggle disabled" href="http://google.com">
         Dropdown <b class="caret"></b>
    </a>
    

    换一个

    <a class="dropdown-toggle"><b class="caret"></b></a>
    

    并删除 &lt;b class="caret"&gt;&lt;/b&gt; 标记,使其看起来像

    <a class="dropdown-toggle disabled" href="http://google.com">
    Dropdown</a><a class="dropdown-toggle"><b class="caret"></b></a>
    

    2) 使用以下 css 规则为它们设置样式:

    .caret1 {
        position: absolute !important; top: 0; right: 0;
    }
    
    .dropdown-toggle.disabled {
        padding-right: 40px;
    }
    

    .caret1 类中的样式用于将其绝对定位在您的li 内,在右上角。

    第二种样式是在下拉列表的右侧添加一些填充以放置插入符号,防止菜单项的文本重叠。

    现在您有一个很好的响应式菜单项,它在桌面版和移动版中看起来都不错,并且它既可点击又可下拉,具体取决于您是点击文本还是插入符号。

    【讨论】:

    • 正是我正在寻找的答案。的确,这有点小技巧,有时事情并不能完美对齐-例如,我在悬停时更改了边框底部颜色,这可能只会同时影响插入符号锚点或文本锚点-但是这是一个可行的权衡。
    【解决方案4】:

    由于没有真正有效的答案(选择的答案会禁用下拉菜单),或者使用 javascript 覆盖,所以就这样吧。

    这是所有 html 和 css 修复(使用两个 &lt;a&gt; 标签):

    <ul class="nav">
     <li class="dropdown dropdown-li">
        <a class="dropdown-link" href="http://google.com">Dropdown</a>
        <a class="dropdown-caret dropdown-toggle"><b class="caret"></b></a>
        <ul class="dropdown-menu">
            <li><a href="#">Link 1</a></li>
            <li><a href="#">Link 2</a></li>
        </ul>
     </li>
    </ul>
    

    现在这是您需要的 CSS。

    .dropdown-li {
        display:inline-block !important;
    }
    .dropdown-link {
        display:inline-block !important; 
        padding-right:4px !important;
    }
    .dropdown-caret {
        display:inline-block !important; 
        padding-left:4px !important;
    }
    

    假设您希望两个 &lt;a&gt; 标签在悬停任一标签时突出显示,您还需要覆盖引导程序,您可以尝试以下操作:

    .nav > li:hover {
        background-color: #f67a47; /*hover background color*/
    }
    .nav > li:hover > a {
        color: white; /*hover text color*/
    }
    .nav > li:hover > ul > a {
        color: black; /*dropdown item text color*/
    }
    

    【讨论】:

    • 不错!还添加 .dropdown-caret {margin-left:-8px},它会将插入符号粘贴到按钮上。
    【解决方案5】:

    我不确定使顶级锚元素成为可点击锚的问题,但这是使桌面视图具有悬停效果和保持其可点击性的移动视图的最简单解决方案。

    // Medium screens and up only
    @media only screen and (min-width: $screen-md-min) {
        // Enable menu hover for bootstrap
        // dropdown menus
        .dropdown:hover .dropdown-menu {
            display: block;
        }
    }
    

    这样,移动菜单仍然可以正常运行,而桌面菜单将在悬停时展开,而不是在单击时展开。

    【讨论】:

    • 如何保持悬停菜单显示整个时间,足够长以单击列表中的项目?
    【解决方案6】:

    你可以使用 javascript 代码片段

    $(function()
    {
        // Enable drop menu clicks
        $(".nav li > a").off();
    });
    

    这将取消绑定点击事件,防止 url 更改。

    【讨论】:

      【解决方案7】:

      这里有一个小技巧,根据屏幕宽度从数据悬停切换到数据切换:

      /**
       * Bootstrap nav menu hack
       */
      $(window).on('load', function () {
          // On page load
          if ($(window).width() < 768) {
              $('.navbar-nav > li > .dropdown-toggle').removeAttr('data-hover').attr('data-toggle', 'dropdown');
          }
      
          // On window resize
          $(window).resize(function () {
              if ($(window).width() < 768) {
                  $('.navbar-nav > li > .dropdown-toggle').removeAttr('data-hover').attr('data-toggle', 'dropdown');
              } else {
                  $('.navbar-nav > li > .dropdown-toggle').removeAttr('data-toggle').attr('data-hover', 'dropdown');
              }
          });
      });
      

      【讨论】:

        【解决方案8】:

        这可以通过添加两个链接来更简单地完成,一个带有文本和 href,一个带有下拉列表和插入符号:

        <a href="{{route('posts.index')}}">Posts</a>
        <a href="{{route('posts.index')}}" class="dropdown-toggle" data-toggle="dropdown" role="link" aria-haspopup="true" aria- expanded="false"></a>
        <ul class="dropdown-menu navbar-inverse bg-inverse">
            <li><a href="{{route('posts.create')}}">Create</a></li>
        </ul>
        

        现在您单击插入符号作为下拉菜单并将链接作为链接。不需要css或js。 我使用Bootstrap 4 4.0.0-alpha.6,不需要定义插入符号,它没有html。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-09-11
          • 2016-07-15
          • 1970-01-01
          • 2011-04-10
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多