我有一个 <div>
,它根据条件有两个类中的一个 -
ng-class="{'visible': sidebarShown, 'hidden': !sidebarShown}"
初始类将始终是 hidden
,当 visible
替换该类时,使用 CSS3 过渡动画来动画显示 width
、left
和 opacity
属性。
然而,当 hidden
类替换 visible
时,动画不会反转,而是所有三个属性的新值立即切换。
我尝试将 transition
属性添加到 .visible
和 .hidden
的样式中,以及每个样式单独添加,但在所有情况下,只有 visible
动画起作用。
我在这里做错了什么?
相关 HTML
<div id="modal" data-ng-if="isMobile"
data-ng-class="{'visible': sidebarShown, 'hidden': !sidebarShown}">
</div>
CSS for #modal.hidden
and #madal.visible
.mobile #modal{
position: absolute;
}
.mobile #modal.hidden{
left: 0;
opacity: 0;
width: 100%;
}
.mobile #modal.visible{
background-color: #000000;
height: 100%;
left: 271px;
opacity: 0.8;
right: 0;
width: calc(100% - 271px);
z-index: 99;
-webkit-transition: all 0.5s ease-in-out;
transition: all 0.5s ease-in-out;
}
进一步尝试
我现在发现一个最初缺少的 height
是问题所在。下面的代码仍然只能单向工作。
我需要的是 -
.mobile #modal.hidden { height: 0; }
.mobile #modal.visible { height: 100%; }
当从.hidden
过渡到.visible
时,height
的值应该立即更改。但是,反过来height
应该在延迟0.5秒
后转换,以便其他动画完成。我已经想出了以下代码,但还不太行。
.mobile #modal{
left: 0;
opacity: 0;
position: absolute;
width: 100%;
-webkit-transition: left 0.5s ease-in-out,
opacity 0.5s ease-in-out,
width 0.5s ease-in-out;
transition: left 0.5s ease-in-out,
opacity 0.5s ease-in-out,
width 0.5s ease-in-out;
}
.mobile #modal.hidden{
height: 0;
-webkit-transition: height 0 ease-in-out 0.5s;
transition: height 0 ease-in-out 0.5s;
}
.mobile #modal.visible{
background-color: #000000;
height: 100%;
left: 271px;
opacity: 0.8;
right: 0;
width: calc(100% - 271px);
z-index: 99;
}
.mobile #modal.hidden
(将属性放入.mobile #modal
中),但也失败了。 - David Gard.mobile #modal
中缺少了height
。然而,这引发了另一个问题;当.visible
替换.hidden
时,我必须立即将高度从0
过渡到100%
,但是当.hidden
替换.visible
时,再过渡0.5秒。我已经更新了我的问题以显示这一点,因为我现在无法使其工作。 - David Gard.mobile #modal
中添加了z-index: -1
作为初始值,现在它按照要求工作了。感谢您的评论 :) - David Gard