我在Bootstrap 3 navbar-collapse中有下拉列表,我想在打开和关闭时顺利地进行动画制作。当在宽度较大的设备上查看时,我发现JavaScript和CSS animation解决方案都很棒。但是当它在手机中崩溃时,关闭下拉列表看起来很糟糕。当它崩溃时,它回到看起来像一个标准的下拉列表。移动平滑关闭动画引导菜单下拉菜单
In this JSFiddle,请尝试缩小输出窗口,使菜单折叠到移动模式。然后,点击“汉堡”图标并打开并关闭“Some Stuff”下拉菜单。正如你所看到的,打开时看起来很棒,但关闭时很糟糕。我已经尝试了很多修补,但无济于事。有关在移动模式下如何使其平滑的任何想法?
注意:我更喜欢CSS答案,但如果这就是它的要求,我会使用JavaScript。
HTML
<nav class="navbar navbar-default navbar-fixed-top">
<div class="container">
<div class="navbar-header">
<button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse">
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
</div>
<div class="navbar-collapse collapse">
<ul class="nav navbar-nav">
<li><a href="#">Home</a></li>
<li>
<div class="navbar-nav-divider"></div>
</li>
<li class="dropdown">
<a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false" style="margin-bottom: 0;">
Some Stuff <span class="caret"></span>
</a>
<ul class="dropdown-menu">
<li><a href="#">Option 1</a></li>
<li><a href="#">Option 2</a></li>
<li><a href="#">Option 3</a></li>
</ul>
</li>
<li><a href="#">Contact</a></li>
</ul>
</div>
</div>
</nav>
CSS
.dropdown .dropdown-menu {
-webkit-transition: max-height 0.3s, opacity 0.2s 0.1s, visibility 0s 0.3s;
-moz-transition: max-height 0.3s, opacity 0.2s 0.1s, visibility 0s 0.3s;
-ms-transition: max-height 0.3s, opacity 0.2s 0.1s, visibility 0s 0.3s;
-o-transition: max-height 0.3s, opacity 0.2s 0.1s, visibility 0s 0.3s;
transition: max-height 0.3s, opacity 0.2s 0.1s, visibility 0s 0.3s;
max-height: 0;
display: block;
overflow: hidden;
opacity: 0;
visibility: hidden;
}
.dropdown.open .dropdown-menu {
-webkit-transition: max-height 0.3s, opacity 0.2s, visibility 0s;
-moz-transition: max-height 0.3s, opacity 0.2s, visibility 0s;
-ms-transition: max-height 0.3s, opacity 0.2s, visibility 0s;
-o-transition: max-height 0.3s, opacity 0.2s, visibility 0s;
transition: max-height 0.3s, opacity 0.2s, visibility 0s;
max-height: 120px;
opacity: 1;
visibility: visible;
}
编辑:
我可以跳过关闭动画解决这个问题,而在移动模式,所以它至少没有按”看起来很可怕。不过,我并不认为这是一个解决方案,只是一种解决方法。为了实现它,我做了我的第一次两个CSS块看起来像这个:
.dropdown .dropdown-menu {
max-height: 0;
display: block;
overflow: hidden;
opacity: 0;
visibility: hidden;
}
@media (min-width: 768px) {
.dropdown .dropdown-menu {
-webkit-transition: max-height 0.3s, opacity 0.2s 0.1s, visibility 0s 0.3s;
-moz-transition: max-height 0.3s, opacity 0.2s 0.1s, visibility 0s 0.3s;
-ms-transition: max-height 0.3s, opacity 0.2s 0.1s, visibility 0s 0.3s;
-o-transition: max-height 0.3s, opacity 0.2s 0.1s, visibility 0s 0.3s;
transition: max-height 0.3s, opacity 0.2s 0.1s, visibility 0s 0.3s;
}
}
感谢您的回答。有一个小错误 - 当ul全部关闭时,“ul”上的填充会产生一个微小的差距。我最终找出了我自己的方式,但是我的解决方案仅适用于使用引导LESS代码的情况,并且会导致需要处理的CSS少一点。我会接受你的答案,因为它是最简单的实现方式,不需要修改LESS,但我也将自己的解决方案作为单独的答案发布。 –