【发布时间】:2015-12-15 04:19:24
【问题描述】:
首先,我只想提一下我已经阅读了这个帖子:
CSS3 transition only when class is added, not when removed
那里的解决方案对我不起作用。当浏览器位于小断点内时,我有一个隐藏的导航,并在单击元素时显示。单击元素通过 jQuery 添加一个类。打开后,有一个关闭按钮,单击该按钮会删除该类。该类按预期进行加减,但由于某种原因,转换仅在添加 .open 类时有效,而不是在删除时有效。这是我的代码:
HTML:
<div class="menu-main-nav-container">
<ul id="menu-main-nav" class="menu">
<li id="menu-item-40" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-40"><a href="http://blackandwright.com/what-we-do">What We Do</a></li>
<li id="menu-item-41" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-41"><a href="http://blackandwright.com/team">Team</a></li>
<li id="menu-item-42" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-42"><a href="http://blackandwright.com/case-studies">Case Studies</a></li>
<li id="menu-item-102" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-102"><a href="http://blackandwright.com/what-next">What Next?</a></li>
<li id="menu-item-104" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-104"><a href="#contact">Contact</a></li>
<li id="menu-item-122" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-122"><a href="#close">Close</a></li>
</ul>
</div>
CSS(指南针 + Sass):
#menu-main-nav {
@include single-transition(opacity, 0.3s, ease-in-out);
opacity: 0;
position: absolute;
top: -27px;
left: 0px;
height: 0;
overflow: hidden;
z-index: 5000;
&.open {
opacity: 1;
height: auto;
}
}
CSS(已编译):
#header #menu-main-nav {
transition: opacity 0.3s ease-in-out;
opacity: 0;
position: absolute;
top: -27px;
left: 0px;
height: 0;
overflow: hidden;
z-index: 5000;
}
#header #menu-main-nav.open {
opacity: 1;
height: auto;
}
jQuery:
$('body').on('click', '.menu-main-nav-container', function(e) {
if(!$mobileNav.hasClass('open')) {
$mobileNav.addClass('open');
}
}).on('click', '.nav-close', function(e) {
if($mobileNav.hasClass('open')) {
$mobileNav.removeClass('open');
}
})
});
我在这里很困惑。请记住,我正在使用 Compass,并且初始转换按预期工作。
【问题讨论】:
-
你能添加你编译的 CSS 和/或创建一个 MCVE 吗?
-
这是因为
height立即从0变为auto。添加类.open时可以这样做,因为动画发生在height扩展为auto之后。但是当.open类被移除时你看不到动画,因为height先转到0然后动画才会发生。 -
@SuviVignarajah 我尝试将过渡(仍然是相同的缓动功能和持续时间)添加到高度并更改高度:自动到高度:300px(因为如果我没记错的话,css 过渡将无法使用高度:自动),问题仍然存在。添加 .open 类时,菜单淡入并下降(高度增加)。但是,当我再次单击时,它会像以前一样突然消失。
-
@AlexanderO'Mara 刚刚添加了编译好的CSS文件的相关行
-
@SuviVignarajah 关于它发生的原因是正确的。这是一个让它在固定高度下工作的例子。 jsfiddle.net/c10n8juh 有不同的方法可以解决这个问题。为什么要更改
height和opacity?
标签: javascript jquery html css css-transitions