CSS3自旋动画


158

我已经回顾了很多演示,并且不知道为什么我无法使CSS3自旋起作用。我正在使用最新的稳定版Chrome。

小提琴:http//jsfiddle.net/9Ryvs/1/

div {
  margin: 20px;
  width: 100px;
  height: 100px;
  background: #f00;
  -webkit-animation-name: spin;
  -webkit-animation-duration: 40000ms;
  -webkit-animation-iteration-count: infinite;
  -webkit-animation-timing-function: linear;
  -moz-animation-name: spin;
  -moz-animation-duration: 40000ms;
  -moz-animation-iteration-count: infinite;
  -moz-animation-timing-function: linear;
  -ms-animation-name: spin;
  -ms-animation-duration: 40000ms;
  -ms-animation-iteration-count: infinite;
  -ms-animation-timing-function: linear;
  -o-transition: rotate(3600deg);
}
<div></div>

Answers:


299

要使用CSS3动画,您还必须定义实际的动画关键帧(您将其命名为spin

阅读https://developer.mozilla.org/en-US/docs/CSS/Tutorials/Using_CSS_animations了解更多信息

配置了动画的时间后,您需要定义动画的外观。这是通过使用@keyframes规则建立两个或更多关键帧来完成的。每个关键帧描述动画元素在动画序列中给定时间应如何呈现。


演示位于http://jsfiddle.net/gaby/9Ryvs/7/

@-moz-keyframes spin {
    from { -moz-transform: rotate(0deg); }
    to { -moz-transform: rotate(360deg); }
}
@-webkit-keyframes spin {
    from { -webkit-transform: rotate(0deg); }
    to { -webkit-transform: rotate(360deg); }
}
@keyframes spin {
    from {transform:rotate(0deg);}
    to {transform:rotate(360deg);}
}

9
之所以会得到✓,是因为您能最好地解释它,并且是唯一包含所有带前缀版本的答案。
iambriansreed

53
这是超级挑剔的,但您应该使它动画到359度。360度和0度在径向上相同,因此动画会在一整圈内短暂地暂停。
亚当·格兰特

1
@AdamGrant谢谢,今天这几乎使我头疼大声笑
mattslone

5
您想设置动画为359.9999999999度,而不是359。旋转度是[0,360)的连续范围,如果旋转到359.0,则每次旋转从359变形为0时,您都会在1角处打勾。 。
mdonoughe

16
为了澄清所有提供不正确信息的评论...所选答案是正确的,未经修改。在浏览器看来,0度和360度实际上是不同的,但仍然是同一点。例如,如果您尝试将其从0度旋转到0度(或从360度旋转到360度),则根本不会旋转。将其从0deg旋转到360deg可使浏览器在完成动画之前将对象旋转360度。设置animation-iteration-count: infinite;,您将在动画中拥有无限帧。即使旋转20分钟也会看起来完美无瑕。
jacurtis


17

从最新的Chrome / FF和IE11开始,无需-ms / -moz / -webkit前缀。这是一个较短的代码(基于先前的答案):

div {
    margin: 20px;
    width: 100px;
    height: 100px;
    background: #f00;

    /* The animation part: */
    animation-name: spin;
    animation-duration: 4000ms;
    animation-iteration-count: infinite;
    animation-timing-function: linear;
}
@keyframes spin {
    from {transform:rotate(0deg);}
    to {transform:rotate(360deg);}
}

现场演示:http : //jsfiddle.net/9Ryvs/3057/


5
将动画规则与速记结合起来animation: spin 4s linear infinite
乔什·哈布达斯

10

带有超棒字体的glyphicon的HTML。

<span class="fa fa-spinner spin"></span>

的CSS

@-moz-keyframes spin {
    to { -moz-transform: rotate(360deg); }
}
@-webkit-keyframes spin {
    to { -webkit-transform: rotate(360deg); }
}
@keyframes spin {
    to {transform:rotate(360deg);}
}

.spin {
    animation: spin 1000ms linear infinite;
}

1
你还让我给予好评,用于将定义.spin
布莱尔康诺利

6

给出正确的359deg的唯一答案:

@keyframes spin {
  from { transform: rotate(0deg); }
  to { transform: rotate(359deg); }
}

&.active {
  animation: spin 1s linear infinite;
}

这是一个有用的渐变,因此您可以证明它正在旋转(如果它是一个圆):

background: linear-gradient(to bottom, #000000 0%,#ffffff 100%);

4

要旋转,可以使用关键帧和变换。

div {
    margin: 20px;
    width: 100px; 
    height: 100px;    
    background: #f00;
    -webkit-animation-name: spin;
    -webkit-animation-duration: 40000ms;
    -webkit-animation-iteration-count: infinite;
    -webkit-animation-timing-function: linear;
    -moz-animation-name: spin;
    -moz-animation-duration: 40000ms;
    -moz-animation-iteration-count: infinite;
    -moz-animation-timing-function: linear;
    -ms-animation-name: spin;
    -ms-animation-duration: 40000ms;
    -ms-animation-iteration-count: infinite;
    -ms-animation-timing-function: linear;
}

@-webkit-keyframes spin {
  from {
    -webkit-transform:rotate(0deg);
  }

  to {
    -webkit-transform:rotate(360deg);
  }
}


4

为了完整起见,这里有一个Sass / Compass示例,它确实缩短了代码,编译后的CSS将包括必要的前缀等。

div
  margin: 20px
  width: 100px 
  height: 100px    
  background: #f00
  +animation(spin 40000ms infinite linear)

+keyframes(spin)
  from
    +transform(rotate(0deg))
  to
    +transform(rotate(360deg))

0
@keyframes spin {
    from {transform:rotate(0deg);}
    to {transform:rotate(360deg);}
}

这将使您回答问题


这似乎只是现有答案的重复。
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.