css - 单击时切换 CSS3 动画

标签 css animation toggle reverse css-animations

在没有 javascript 的情况下,在单击时更改 CSS3 动画方向的最佳方法是什么?

我最近一直在探索复选框黑客攻击,并试图找出一种方法,只使用一组关键帧,而不是两组,一组前进,一组返回。这可能吗?或者有没有一种方法可以用一组来完成?

例如我有以下关键帧:

@keyframes moveIt {
  0%   { 
    transform: translateX(0);
    width: $size;
  }
  50%  {
    width: $size*1.2;
  }
  100% {
    transform: translateX(50px);
    width: $size;
  }
}
@keyframes moveItBack {
  100%   { 
    transform: translateX(0);
    width: $size;
  }
  50%  {
    width: $size*1.2;
  }
  0% {
    transform: translateX(50px);
    width: $size;
  }
}

有什么方法可以将其减少到只有第一组?那么回来的时候从100%开始,回到0%呢?

这是一个 example我正在努力实现这一目标。

最佳答案

CSS 并不是真的打算做这样的事情,但有一些变通办法

最好我们可以做如下的事情,因为它在逻辑上是有意义的

.bubble {
  ...
  animation: moveIt .25s forwards ease-out;
}
input[type=checkbox]:checked ~ .bubble {
  animation: moveIt .25s backwards ease-out;
}

但是,您不能使用纯 CSS[1] 重置或更改为不同的动画。这是因为每个元素只允许有一个动画。你可以reset it in javascript通过使用 setTimeout 或克隆元素,但我假设您正试图避免这种情况。

因此,您有两个选择。第一个是放弃大小的变化,只切换 translateX like so :

.bubble {
  ...
  transition: all .25s ease-out;
}
input[type=checkbox]:checked ~ .bubble {
  transform: translateX(50px);
}

保留大小变化的另一种选择是做一些更复杂的事情。您基本上可以通过使用伪元素来伪造大小的变化。通过切换彼此相反的动画,您可以使整个元素看起来每次都在脉动。 Demo

.bubble {
  ...
  transition: all .25s ease-out;
}
.bubble:after, .bubble:before {
  content:''; 
  position:absolute;
  width:100%; height:100%;
  background:inherit;
  border-radius:inherit;
  animation:'';
}
.bubble:before { animation:size .25s ease-out; }
input[type=checkbox]:checked ~ .bubble:before { animation:''; }
input[type=checkbox]:checked ~ .bubble {
  transform: translateX(50px);
}
input[type=checkbox]:checked ~ .bubble:after {
  animation:size .25s ease-out;
}
@keyframes size {
  50% { transform:scale(1.2); }
}

我希望这是有道理的!

[1]:从第二个选项可以看出,可以,只是需要一个移除过去动画的状态。可悲的是像 animation:''; animation:moveIt .25s 向后缓出; 不重置

关于css - 单击时切换 CSS3 动画,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23393141/

相关文章:

java - android View 翻转动画?

javascript - 切换 Jquery 不起作用

JQuery 通过点击切换不透明度

css - 修改select标签为内联显示

javascript - Repl.it 上的自定义 404-Not Found 页面

html - 为什么我的标签与输入组不一致 - Bootstrap

jquery - 动画 css 不起作用

android - ListView长按动画

javascript - 切换和 JavaScript : Can't Get It To Work

html - 网格行的 Bootstrap 小设备顺序