CSS3 Döndürme Animasyonu


158

Birkaç demoyu gözden geçirdim ve neden CSS3 spin'in çalışamadığını bilmiyorum. Chrome'un en son kararlı sürümünü kullanıyorum.

Keman: 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>

Yanıtlar:


299

CSS3 Animasyonunu kullanmak için, gerçek animasyon ana karelerini de tanımlamanız gerekir ( adlandırdığınızspin )

Daha fazla bilgi için https://developer.mozilla.org/tr-TR/docs/CSS/Tutorials/Using_CSS_animations adresini okuyun.

Animasyonun zamanlamasını yapılandırdıktan sonra, animasyonun görünümünü tanımlamanız gerekir. Bu, @keyframesat-kuralını kullanarak iki veya daha fazla anahtar kare oluşturarak yapılır . Her ana kare, animasyonlu öğenin animasyon dizisi sırasında belirli bir zamanda nasıl oluşturulması gerektiğini açıklar.


Demo: 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
En iyi açıkladığınız için ✓ alırsınız ve tüm önekli sürümleri içeren tek cevap sizsiniz.
iambriansreed

53
Bu süper nitpicky, ama gerçekten 359 derece canlandırmalısınız. 360 ve 0 derece radyal olarak aynıdır, bu nedenle animasyon tam bir turda kısa bir süre duraklar.
Adam Grant

1
@AdamGrant Teşekkür ederim, bu neredeyse bugün başım ağrıyor lol
mattslone

5
359'a değil, 359.9999999999 dereceye animasyon uygulamak istiyorsunuz. Dönme dereceleri sürekli [0, 360) aralığıdır ve 359.0'a dönerseniz, 359'dan 0'a çarptığında her dönüşün başında 1 derecelik bir işaretiniz olacaktır. .
mdonoughe

16
Yanlış bilgi veren tüm yorumları açıklığa kavuşturmak için ... seçilen cevap değişiklik yapılmadan DOĞRUDUR. 0 ve 360 ​​derece aslında hala aynı nokta olmasına rağmen tarayıcının gözünde farklıdır. Örneğin, 0 derece ila 0 derece (veya 360 derece ila 360 derece) arasında döndürmeye çalışırsanız, hiç döndürülmez. 0 derece ile 360 ​​derece arasında döndürülmesi, tarayıcıya animasyonu tamamlamadan önce nesneyi tam 360 derece döndürmesini söyler. Ayarlayın animation-iteration-count: infinite;ve animasyonda sonsuz karelere sahip olacaksınız. 20 dakikalık bir dönüş bile kusursuz ve pürüzsüz görünecektir.
jacurtis


17

En son Chrome / FF ve IE11'de -ms / -moz / -webkit önekine gerek yoktur. İşte daha kısa bir kod (önceki cevaplara dayanarak):

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);}
}

Canlı Demo: http://jsfiddle.net/9Ryvs/3057/


5
Animasyon kurallarını steno ile birleştirin animation: spin 4s linear infinite.
Josh Habdas

10

Yazı tipi harika glificon 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
Ayrıca .spin
Blair Connolly

6

Doğru 359 derece veren tek cevap:

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

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

İşte yararlı bir degrade, böylece döndüğünü kanıtlayabilirsiniz (eğer bir daire ise):

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

4

Döndürmek için, anahtar kareleri ve bir dönüşümü kullanabilirsiniz.

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);
  }
}

Misal


4

Tamamlama uğruna, kodu gerçekten kısaltan bir Sass / Compass örneği, derlenen CSS gerekli önekleri vb. İçerecektir.

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);}
}

bu soruyu cevaplamanızı sağlayacaktır


Bu sadece mevcut cevabın tekrarı gibi görünüyor .
Pang
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.