试图动画display:none
是你的问题的根源。为什么淡入作品和淡出不会在混乱来自同时使用display
和opacity
的组合。
的display
属性仅由是否被施加.active
决定;动画实际上并没有改变它,而opacity
是按预期动画的。在淡入时,这意味着你立即显示你的元素,然后从透明转变为不透明。在淡出时,这意味着您立即隐藏您的元素,然后在隐藏时从不透明变为透明。
有,你可以解决这个问题了几个不同的方式,但它有点取决于上下文。例如,你可以把它作为一个block
元素,并使用height
属性,使其崩溃:
$('button').on('click', function(e) {
e.preventDefault();
$(this).siblings('.box').toggleClass('active');
})
@import "bourbon";
* {
box-sizing: border-box;
text-align: center;
}
button {
margin: 30px 0;
border: 1px solid #ccc;
text-align: center;
padding: 1em;
background: none;
box-shadow: none;
}
.box {
margin: 0 auto;
width: 80%;
height: 0;
display: block;
line-height: 100px;
background: #ccc;
border: 1px solid #444;
text-align: center;
opacity: 0;
animation: FadeOut 1s ease-in-out;
}
.box.active {
display: block;
height: initial;
opacity: 1;
animation: FadeIn 1s ease-in-out;
}
@keyframes FadeIn {
0% {
opacity: 0;
height: initial;
}
100% {
opacity: 1;
height: initial;
}
}
@keyframes FadeOut {
0% {
opacity: 1;
height: initial;
}
99% {
opacity: 0;
height: initial;
}
100% {
height: 0;
opacity: 0;
height: 0;
}
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="col">
<button class="toggle-good">Toggle display</button>
<p class="box good">I move nicely!</p>
<p>Extra paragraph to show collapse</p>
</div>
正如你看到的例子,我制作动画的淡入 – Mick
当你。在'.box'选择器中删除'display:none',动画变得平滑,但是框不会折叠。 – sniels