相同的 CSS 动画没有相同的持续时间(带有动画背景颜色)

Posted

技术标签:

【中文标题】相同的 CSS 动画没有相同的持续时间(带有动画背景颜色)【英文标题】:The same CSS animations does not have the same durations (with animated background color) 【发布时间】:2017-12-06 20:55:48 【问题描述】:

我尝试用 css 动画制作两个块。它具有相同的transform 动画,但其中之一也具有background-color 动画。此动画拆分为两个@keyframes

查看代码(https://codepen.io/mctep/pen/Rgyaep):

<style>
   .a 
      position: absolute;
      left: 0;
      top: 0;
      width: 100px;
      height: 100px;
      background-color: red;
      animation: a 1s infinite;
    

    .b 
      position: absolute;
      left: 0;
      top: 0;
      width: 100px;
      height: 100px;
      background-color: gray;
      animation: b 1s infinite;
    

    @keyframes a 
      0% 
        background-color: red;
        transform: translateX(0);
      

      50% 
        background-color: green;
        transform: translateX(100px);
      

      100% 
        background: red;
      
    

    @keyframes b 
      0% 
        transform: translateX(0);
      

      50% 
        transform: translateX(100px);
      
     
</style>

<div class="a"></div>
<div class="b"></div>

在谷歌浏览器中,彩色块的动画滞后于灰色块。在 Safari 和 FF 中,它完美运行。

我可以为background 制作一个@keyframes,为transform 制作另一个,它可以解决问题。但我想对单个元素使用 animation 属性的单个值。如果没有任何方法可以修复它,我会将 movingcoloring 动画分开。

为什么会这样?是谷歌浏览器的错误吗?

【问题讨论】:

变换:translateX100px);不正确,你看到了吗? @Pv-Viana 谢谢,已修复 【参考方案1】:

无法为您提供为什么会发生这种情况的具体原因,但我们也可以通过在动画 B 中简单地指定 background-color 来消除 Chrome 的困惑。

@keyframes b 
  0% 
    background-color: gray; /* add this */
    transform: translateX(0);
  

.a 
  position: absolute;
  left: 0;
  top: 0;
  width: 100px;
  height: 100px;
  background-color: red;
  animation: a 1s infinite;

.b 
  position: absolute;
  left: 0;
  top: 0;
  width: 100px;
  height: 100px;
  background-color: gray;
  animation: b 1s infinite;

@keyframes a 
  0% 
    background-color: red;
    transform: translateX(0);
  
  50% 
    background-color: green;
    transform: translateX(100px);
  
  100% 
    background: red;
  

@keyframes b 
  0% 
    background-color: gray;
    transform: translateX(0);
  
  50% 
    transform: translateX(100px);
  
<div class="a"></div>
<div class="b"></div>

【讨论】:

以上是关于相同的 CSS 动画没有相同的持续时间(带有动画背景颜色)的主要内容,如果未能解决你的问题,请参考以下文章

使用animate.css [编辑]在第一个动画后重复相同的动画6s

为啥相同的 css 动画有时会不正确?

Flutter:一次多次使用相同的动画小部件

如何强制元素的 CSS 动画从与上一个动画完成的位置相同的位置开始?

为啥这个 CSS3 动画在 Safari 和 Chrome 中不起作用?

CSS Grid of Hexagons - 改变悬停动画