允许单击twitter bootstrap下拉切换链接吗?


68

我们已经设置了twitter bootstrap下拉列表以在悬停上工作(而不是单击[是的,我们知道触摸设备上没有悬停])。但是,我们希望能够在单击主链接时使其工作。

默认情况下,twitter引导程序会阻止它,那么如何重新启用它呢?

Answers:


122

只需在您的锚点上将禁用添加为一个类:

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

22
好了,主菜单项可以通过这种方式单击,但是子菜单不会下拉。是的,我希望子菜单项通过单击插入符号来显示,而不是像Hailwood那样通过悬停来显示。
Attila Fulop 2012年

4
+1。很棒的解决方案,在引导文档中没有看到,所以感谢您指出了disabled属性。
IntricatePixels

尽管添加了该类,但这对我现在<nav class="nav-main mega-menu"> <ul id="topMain" class="nav nav-pills nav-main scroll-menu"> <li id="dropdown-menu-home"> <li id="about" class="dropdown active"> <a class="dropdown-toggle disabled" href="https://stackoverflow.com/about/"> <ul class="dropdown-menu"> </li> 不起作用: 它仍然处于非活动状态,无法单击。我正在使用bootstrap 3和基于它的主题。
2014年

7
在<a>标记中添加禁用使下拉列表停止工作?有什么解决办法可以使两者都起作用?
ParaMeterz 2014年

1
为了解决“触摸时没有悬停”的问题,我使用了modernizr向html元素添加了一个非触摸类。然后,我添加了允许下拉菜单在悬停时打开的样式。我仅通过js将禁用的类添加到了来自modernizr的非触摸类的设备。这样,对于实际获得正常导航的大型触摸设备,下拉菜单可按照自举目的工作。但是对于非触摸设备,老式的悬停下拉列表代替了bootstrap的clicky解决方案。在我看来,这是两全其美。
codecribblr 2015年

11

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

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>

并删除<b class="caret"></b>标签,因此它看起来像

<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的右上角。

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

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


只是我一直在寻找的答案。没错,这有点骇人听闻,有时情况并非完全一致-例如,我在悬停时边框底部的颜色发生了变化,这可能只会同时影响插入符号锚点或文本锚点-但这是一个可行的权衡。
Nikola Ivanov Nikolov

10

由于实际上并没有一个有效的答案(选择的答案会禁用下拉列表),或者使用javascript覆盖它,因此可以使用。

这都是html和css修复(使用两个<a>标记):

<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;
}

假设您希望两个<a>标签都在两个标签上悬停时都突出显示,还需要覆盖引导程序,则可以使用以下方法:

.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},它将插入符插入按钮。
Αλέκος

4

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

// 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;
    }
}

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


如何保持悬停菜单显示整个时间,足够长的时间单击列表中的某个项目?
Rachel S

2

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


4
但是,在智能手机上没有悬停或“完全没有”。您需要以某种方式单击该项目以使其下拉。
2014年

好吧,Galaxy S3可以检测到悬停的手指。但是世界还没有为此做好准备。:)
Josh M.

对于我们来说,在移动设备上显示下拉菜单并不重要,因此此解决方案可以工作。
Sabrina Leggett

1

您可以使用JavaScript代码段

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

这将取消绑定click事件,从而防止url更改。


0

这是根据屏幕宽度从数据悬停切换为数据切换的一个小技巧:

/**
 * 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');
        }
    });
});

0

可以通过添加两个链接来简化此操作,一个链接带有文本和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。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.