【发布时间】:2018-04-04 22:06:27
【问题描述】:
在我的元素上,只要它有一个特定的类 (wiggle),我就会运行一个 CSS 动画,并且只要它有一个不同的类 (right),就会运行一个过渡:
<div class="outer">
<div class="inner wiggle"></div>
</div>
@keyframes wiggle {
from {
left: 10%;
}
50% {
left: 30%;
}
to {
left: 10%;
}
}
.inner {
left: 0;
&.wiggle {
animation: wiggle 2s infinite;
}
&.right {
left: 90%;
transition: left 2s;
}
}
现在,如果删除wiggle 类并同时添加right,则过渡不会播放; left: 90% 立即适用。但是,如果删除前者和添加后者之间存在延迟,则转换将按预期进行。
Here's a JSFiddle illustrating the issue.
看起来当来自动画时,值(例如 left 在这种情况下)没有明确的值来转换,所以它们只是呈现到它们的最终状态。
这是预期的行为,即它是规范的一部分吗?或者浏览器是否免费如何处理这种情况?
我已经在最新版本的 Firefox 和 Chromium 上进行了测试。
澄清: 我主要不是在寻找变通办法,尤其是不复杂的变通办法,但更多是出于为什么浏览器的行为与它们完全相同的原因。
【问题讨论】:
-
我认为这可能是浏览器渲染中的一个错误,但如果你想要一个解决方案,我可以给你一个
transform.! -
@Jeremy 第一个看起来是由相同的行为引起的,但不是完全相同的问题,第二个略有不同,至少它的解决方案适用于我的情况。
-
@webBer 好吧,我也在尝试对其他属性做类似的事情,
left最容易可视化和隔离问题。例如,opacity没有这样的解决方法。 -
@CedricReichenbach 我不是说同样的问题,抱歉。但我提到这两者都有相同的原因。因为你不能在同一个元素上拥有
animation和transition。
标签: css css-transitions css-animations