【问题标题】:Bootstrap 3 dropdown transitionBootstrap 3 下拉转换
【发布时间】:2014-09-16 18:42:14
【问题描述】:

首先是fiddle

只是一个常规的引导下拉菜单,我对 css 进行了一些更改,以便下拉菜单出现在悬停(而不是单击)上,但是我如何想要一个非常简单的淡入淡出动画。我尝试了 css 转换,但它不起作用,因为 .dropdown-menu 元素应用了“显示:无”,悬停时它变为“显示:块”。如何为从“显示:无”变为“显示:块”的元素设置动画,或者是否有任何其他方法可以实现这一点?

我已经用谷歌搜索了这个并找到了一些答案,但他们没有帮助。

HTML 代码:

<div class="dropdown">
  <button class="btn btn-default dropdown-toggle" type="button" id="dropdownMenu1" data-toggle="dropdown">
    Dropdown
    <span class="caret"></span>
  </button>
  <ul class="dropdown-menu" role="menu" aria-labelledby="dropdownMenu1">
    <li role="presentation"><a role="menuitem" tabindex="-1" href="#">Action</a></li>
    <li role="presentation"><a role="menuitem" tabindex="-1" href="#">Another action</a></li>
    <li role="presentation"><a role="menuitem" tabindex="-1" href="#">Something else here</a></li>
    <li role="presentation" class="divider"></li>
    <li role="presentation"><a role="menuitem" tabindex="-1" href="#">Separated link</a></li>
  </ul>
</div>

CSS 代码:

.dropdown .dropdown-menu{
opacity: 0;
transition:         all 400ms ease;
-moz-transition:    all 400ms ease;
-webkit-transition: all 400ms ease;
-o-transition:      all 400ms ease;
-ms-transition:     all 400ms ease;
}
.dropdown:hover .dropdown-menu {
    display: block;
    opacity: 1;
}

【问题讨论】:

  • 您的下拉菜单似乎已经在悬停时正确淡入/淡出(基于不透明度从 0 变为 1 的过渡)。我增加了淡入淡出时间,所以它更明显。如果您愿意接受该解决方案,也有可用的 jQuery 解决方案。 jsfiddle.net/5zr4r/147
  • @Will:是的,它有效,感谢您的演示,但问题仍然存在,我如何确保它出现在我的演示中?

标签: javascript jquery html css twitter-bootstrap


【解决方案1】:
.dropdown .dropdown-menu {
  display: block;
  visibility: hidden;
  opacity: 0;
  transition:         all 0.2s  ease;
  -moz-transition:    all 0.2s  ease;
  -webkit-transition: all 0.2s  ease;
  -o-transition:      all 0.2s  ease;
  -ms-transition:     all 0.2s  ease;
}
.dropdown:hover .dropdown-menu {
  visibility: visible;
  opacity: 1;
}
.dropdown {
  display: inline-block;
}

只需将display:blockvisibility:hidden; 添加到.dropdown .dropdown-menu {。 然后将visibility: visible添加到.dropdown:hover .dropdown-menu {就完成了。

您需要更改可见性,因为下拉菜单的不透明度为 0,但它仍然存在。您可以通过将鼠标悬停在您的按钮下方进行检查。通过更改可见性,您的下拉菜单只会在您的按钮悬停时出现。

【讨论】:

    【解决方案2】:

    您可以使用 display:block 覆盖默认样式 display:none,因为您还使用 opacity:0 来隐藏菜单。试试下面的 CSS,看看它是否能满足你的需要。我更新了过渡速度,让效果更加明显。

    .dropdown .dropdown-menu{
        display: block;
        opacity: 0;
    
        -moz-transition:    all 1000ms ease;
        -webkit-transition: all 1000ms ease;
        -o-transition:      all 1000ms ease;
        -ms-transition:     all 1000ms ease;
        transition:         all 1000ms ease;
    }
    .dropdown:hover .dropdown-menu {
        display: block;
        opacity: 1;
    }
    

    你的小提琴的更新版本:http://jsfiddle.net/pjej7o2m/1/

    这是一个 jQuery 脚本,可以作为悬停在 div 上的替代方法(仍然使用 css 过渡属性来实现不透明度)

    $(function(){
      var $menu = $('.dropdown-menu');
    
      $('.dropdown-toggle').hover(
        function() {
          $menu.css('opacity',1);
        },
        function() {
          $menu.css('opacity',0);
        });
    })();
    

    更新小提琴:http://jsfiddle.net/pjej7o2m/2/

    【讨论】:

    • 我确实想到了这一点,但在我的情况下它不起作用,因为菜单旁边有一个幻灯片,当我将鼠标悬停在下拉菜单附近时,它会变为不透明度:1. 这是与 z-index 一起工作。我将显示更改为阻止,但将 z-index 更改为 -1,在悬停时将其更改回 10。但必须有更好的解决方案。谢谢你的回答。
    • 这更像是一个 hack,而不是一个解决方案。
    • 是的,css 悬停已绑定到父 div,这就是为什么当您将鼠标悬停在按钮侧面时会出现效果。我添加了一个 jQuery 解决方案,它也可能对你有用。
    • 感谢js解决方案,一定有更好的办法,很多网站都有。我需要做更多的研究。
    猜你喜欢
    • 1970-01-01
    • 2017-02-04
    • 2014-09-10
    • 2016-09-10
    • 2016-05-03
    • 2014-08-12
    • 2014-10-25
    • 2013-10-09
    • 1970-01-01
    相关资源
    最近更新 更多