У меня есть выпадающие списки в окне Bootstrap 3 navbar-collapse, которые я хочу анимировать плавно при открытии и закрытии. Как решения JavaScript, так и CSS animation, которые я нашел, отлично работают при просмотре на устройстве большей ширины. Но когда он рухнул на мобильном телефоне, закрытие выпадающего списка выглядит ужасно. Пока он рушится, он возвращается к стандартным раскрывающимся спискам.Плавная анимация закрытия в мобильном меню выпадающего меню Bootstrap
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;
}
EDIT:
я могу обойти эту проблему, пропуская близко анимации в то время как в мобильном режиме, так что это, по крайней мере Безразлично» t выглядят ужасно. Тем не менее, я не рассматриваю это решение, просто обходное решение. Чтобы осуществить это, я сделал первый из двух моих 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' создает небольшой промежуток, когда все закрыто. Я закончил тем, что выяснил свой собственный путь, но мое решение применимо только в том случае, если вы работаете с кодом LAST для начальной загрузки и получаете немного меньше CSS, который необходимо обработать. Я приму свой ответ, так как это самый простой способ реализовать и не требует изменения LESS, но я также опубликую собственное решение как отдельный ответ. –