我在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,但我也將自己的解決方案作爲單獨的答案發布。 –