我有<div>
条件有两个类之一 -
ng-class="{'visible': sidebarShown, 'hidden': !sidebarShown}"
初始类始终为hidden
,当visible
替换该类时,width
,left
和opacity
属性都使用CSS3进行动画处理过渡。
但是,当hidden
类重新映射visible
动画未被反转,并且安装时,所有三个属性的新值都会立即切换。
我尝试将transition
属性添加到.visible
和.hidden
的样式,以及每个样式,但在所有情况下只有visible
动画作品。
我在这里做错了什么?
相关HTML
<div id="modal" data-ng-if="isMobile"
data-ng-class="{'visible': sidebarShown, 'hidden': !sidebarShown}">
</div>
#modal.hidden
和#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
的vaule应立即更改。但是,另一种方式height
应该在0.5s
延迟后转换,允许其他动画完成。我已经提出了下面的代码,但它仍然没有完全存在。
.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;
}
答案 0 :(得分:1)
在 @MaximillianLaumeister 发布的评论的指导下,我确定问题是没有定义初始高度值。
然后我尝试转换该值,但最终解决方案是通过设置#modal
来“隐藏”z-index: -1;
。
当转换从99变为-1(0.5s)时,.mobile #modal
在整个转换过程中基本上可见,仅在结束前约0.005s消失在其他内容之后。)
.mobile #modal{
height: 100%;
left: 0;
opacity: 0;
position: absolute;
width: 100%;
-webkit-transition: all 0.5s ease-in-out;
transition: all 0.5s ease-in-out;
z-index: -1;
}
.mobile #modal.visible{
background-color: #000000;
height: 100%;
left: 271px;
opacity: 0.8;
right: 0;
width: calc(100% - 271px);
z-index: 99;
}