CSS3 动画:前向填充不适用于 Safari 上的位置和显示
CSS3 Animation: Forwards fill not working with position and display on Safari
所以,我创建了一个 CSS3 动画,它应该通过将元素的不透明度从 1 设置为 0 来淡出元素,并在最后一帧将 position
更改为 absolute
和 display
到 none
。但是在Safari上它只会保持不透明度,位置和显示不会设置为最终值。
@-webkit-keyframes impressum-fade-out {
0% {
opacity: 1;
display: block;
position: relative;
}
99% {
opacity: 0;
position: relative;
}
100% {
opacity: 0;
display: none;
position: absolute;
}
}
它似乎适用于 Chrome 但不适用于 Safari(我试过版本 8)。显然,位置和显示在 animation-fill-mode 下无法正常工作:转发...
JSFiddle:http://jsfiddle.net/uhtL12gv/
赏金编辑: 我知道 Javascript 和 transitionend 事件的解决方法。但我想知道为什么浏览器对此缺乏支持?规范是否声明 fillmode forwards 不适用于位置等某些属性,或者这是浏览器中的错误?因为我在错误跟踪器中找不到任何东西。如果有人有一些见解,我将不胜感激
根据评论中的建议,您可以调整高度。
编辑: 添加了动画参考链接。
$('.block').click(function() { $(this).toggleClass('active') });
@-webkit-keyframes impressum-fade-out {
0% {
opacity: 1;
}
99% {
opacity: 0;
}
100% {
opacity: 0;
height:0;
}
}
.block {
width: 100px;
height: 100px;
background: blue;
}
.block2 {
width: 100px;
height: 100px;
background: red;
}
.block.active {
-webkit-animation-name: impressum-fade-out;
animation-name: impressum-fade-out;
-webkit-animation-duration: 500ms;
animation-duration: 500ms;
-webkit-animation-fill-mode: forwards;
animation-fill-mode: forwards;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<div class="block"></div>
<div class="block2"></div>
我建议你基于CSS3 Transitions and transitionend事件的跨浏览器解决方案:
$('.block').one('click', function() {
var $this = $(this);
$this.one('webkitTransitionEnd transitionend', function() {
$this.addClass('block_hidden');
$this.removeClass('block_transition');
});
$this.addClass('block_transition');
});
.block {
width: 100px;
height: 100px;
background: blue;
-webkit-transition: opacity 0.5s;
transition: opacity 0.5s;
}
.block_2 {
background: red;
}
.block_transition {
opacity: 0;
}
.block_hidden {
display: none;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<div class="block"></div>
<div class="block block_2"></div>
所以,我创建了一个 CSS3 动画,它应该通过将元素的不透明度从 1 设置为 0 来淡出元素,并在最后一帧将 position
更改为 absolute
和 display
到 none
。但是在Safari上它只会保持不透明度,位置和显示不会设置为最终值。
@-webkit-keyframes impressum-fade-out {
0% {
opacity: 1;
display: block;
position: relative;
}
99% {
opacity: 0;
position: relative;
}
100% {
opacity: 0;
display: none;
position: absolute;
}
}
它似乎适用于 Chrome 但不适用于 Safari(我试过版本 8)。显然,位置和显示在 animation-fill-mode 下无法正常工作:转发...
JSFiddle:http://jsfiddle.net/uhtL12gv/
赏金编辑: 我知道 Javascript 和 transitionend 事件的解决方法。但我想知道为什么浏览器对此缺乏支持?规范是否声明 fillmode forwards 不适用于位置等某些属性,或者这是浏览器中的错误?因为我在错误跟踪器中找不到任何东西。如果有人有一些见解,我将不胜感激
根据评论中的建议,您可以调整高度。
编辑: 添加了动画参考链接。
$('.block').click(function() { $(this).toggleClass('active') });
@-webkit-keyframes impressum-fade-out {
0% {
opacity: 1;
}
99% {
opacity: 0;
}
100% {
opacity: 0;
height:0;
}
}
.block {
width: 100px;
height: 100px;
background: blue;
}
.block2 {
width: 100px;
height: 100px;
background: red;
}
.block.active {
-webkit-animation-name: impressum-fade-out;
animation-name: impressum-fade-out;
-webkit-animation-duration: 500ms;
animation-duration: 500ms;
-webkit-animation-fill-mode: forwards;
animation-fill-mode: forwards;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<div class="block"></div>
<div class="block2"></div>
我建议你基于CSS3 Transitions and transitionend事件的跨浏览器解决方案:
$('.block').one('click', function() {
var $this = $(this);
$this.one('webkitTransitionEnd transitionend', function() {
$this.addClass('block_hidden');
$this.removeClass('block_transition');
});
$this.addClass('block_transition');
});
.block {
width: 100px;
height: 100px;
background: blue;
-webkit-transition: opacity 0.5s;
transition: opacity 0.5s;
}
.block_2 {
background: red;
}
.block_transition {
opacity: 0;
}
.block_hidden {
display: none;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<div class="block"></div>
<div class="block block_2"></div>