CSS3逐步设置颜色

use*_*170 5 css animation css3 css-animations

我努力让自己在一个按钮,改变动画color,并background-color从白到黑。

我不想褪色,所以我发现我可以用animation-timing-function: step

但是,当我使用它时,动画不会达到黑色,而是停止为灰色。

.animated-play-btn {
  background-color: white;
  height: 50px;
  width: 200px;
  animation-timing-function: steps(2, end);
  animation-duration: 1s;
  animation-name: clipping_btn;
  animation-iteration-count: infinite;
  animation-fill-mode: forwards;
}
@keyframes clipping_btn {
  from {
    background-color: #000;
    color: white;
  }
  to {
    color: black;
    background-color: #fff;
  }
}
Run Code Online (Sandbox Code Playgroud)
<button class="animated-play-btn">
  coucou
</button>
Run Code Online (Sandbox Code Playgroud)

这里是演示

任何人都知道如何执行此操作(当然没有JS)?

Har*_*rry 5

steps()对于动画的计时功能,这似乎是一个“灰色”区域(意为双关语)。

似乎发生的事情是,当您使用时steps(2, end),动画应该经历两个步骤-一个步骤是从黑色背景+白色到中间状态(两个都是灰色),然后是另一个步骤,从中间状态到白色背景+黑色(结束状态),但第二步恰好在动画结束时发生,并且几乎在元素同时进入其原始状态的同时开始下一个循环。因此,这会给人留下白色背景+黑色永远不会发生的印象。

似乎可行的解决方案是使用steps(1, end)开始和结束状态作为黑色背景+白色,而中间阶段使用白色背景+黑色。我没有任何确定的解释为什么会起作用,但关键是它确实起作用。

在designmodo上的这篇文章是我找到的关于该主题的唯一文章,但是我仍然很难解释这种现象的原因。看到此示例后,我们可以确定的一件事是,如果steps(n, start)使用该车,steps(n, end)它永远不会到达起始位置,而如果使用它,它就永远不会到达终点。这是一个4步动画,但只有3步可见,另一步恰好在开始或结束时发生(取决于参数)。

解:

.animated-play-btn {
  background-color: white;
  height: 50px;
  width: 200px;
  animation-timing-function: steps(1, end);
  animation-duration: 1s;
  animation-name: clipping_btn;
  animation-iteration-count: infinite;
  animation-fill-mode: forwards;
}
@keyframes clipping_btn {
  0%, 100% {
    background-color: #000;
    color: white;
  }
  50% {
    color: black;
    background-color: #fff;
  }
}
Run Code Online (Sandbox Code Playgroud)
<button class="animated-play-btn">
  coucou
</button>
Run Code Online (Sandbox Code Playgroud)