Animasi Spin CSS3


158

Saya telah meninjau beberapa demo dan tidak tahu mengapa saya tidak bisa mengaktifkan spin CSS3. Saya menggunakan rilis stabil terbaru dari Chrome.

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

Jawaban:


299

Untuk menggunakan Animasi CSS3, Anda juga harus menentukan kerangka kunci animasi yang sebenarnya ( yang Anda beri namaspin )

Baca https://developer.mozilla.org/en-US/docs/CSS/Tutorials/Using_CSS_animations untuk info lebih lanjut

Setelah mengonfigurasi waktu animasi, Anda harus menentukan tampilan animasi. Ini dilakukan dengan membuat dua atau lebih keyframe menggunakan @keyframesat-rule. Setiap kerangka kunci menjelaskan bagaimana elemen animasi harus ditampilkan pada waktu tertentu selama urutan animasi.


Demo di 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
Anda mendapatkan ✓ karena Anda menjelaskannya dengan terbaik dan Anda adalah satu-satunya jawaban yang menyertakan semua versi awalan.
iambriansreed

53
Ini super nitpicky, tetapi Anda harus benar-benar menghidupkannya hingga 359 derajat. 360 dan 0 derajat adalah sama secara radial, sehingga animasi akan berhenti sebentar pada putaran penuh.
Adam Grant

1
@ AdamGrant Terima kasih, ini hampir membuat saya sakit kepala hari ini lol
mattslone

5
Anda ingin menghidupkan hingga 359,9999999999 derajat, bukan 359. Derajat rotasi adalah kisaran terus menerus dari [0, 360) dan jika Anda memutar ke 359.0 Anda akan memiliki centang 1 derajat pada awal setiap rotasi ketika ia berputar dari 359 ke 0 .
mdonoughe

16
Untuk memperjelas semua komentar ini yang memberikan informasi yang salah ... jawaban yang dipilih BENAR-BENAR tanpa modifikasi. 0 dan 360 deg sebenarnya berbeda di mata browser, sementara masih menjadi titik yang sama. Misalnya jika Anda mencoba memutarnya dari 0deg ke 0deg (atau 360deg ke 360deg), itu tidak akan berputar sama sekali. Memutarnya dari 0deg ke 360deg memberitahu browser untuk mengubah objek 360 derajat penuh sebelum menyelesaikan animasi. Atur animation-iteration-count: infinite;dan Anda akan memiliki bingkai tanpa batas dalam animasi. Bahkan rotasi 20 menit akan terlihat sempurna & mulus.
jacurtis

28

Anda belum menentukan kerangka kunci apa pun. Saya membuatnya bekerja di sini .

div {
    margin: 20px;
    width: 100px; 
    height: 100px;    
    background: #f00;
    -webkit-animation: spin 4s infinite linear;
}

@-webkit-keyframes spin {
    0%  {-webkit-transform: rotate(0deg);}
    100% {-webkit-transform: rotate(360deg);}   
}

Anda sebenarnya dapat melakukan banyak hal yang sangat keren dengan ini. Ini yang saya buat sebelumnya .

:)

NB Anda dapat melewati keharusan menuliskan semua awalan jika Anda menggunakan -prefix-free .


17

Pada Chrome / FF terbaru dan pada IE11 tidak perlu awalan -ms / -moz / -webkit. Berikut kode yang lebih pendek (berdasarkan jawaban sebelumnya):

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

Demo Langsung: http://jsfiddle.net/9Ryvs/3057/


5
Kombinasikan aturan animasi dengan steno animation: spin 4s linear infinite.
Josh Habdas

10

HTML dengan glyphicon font-mengagumkan.

<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
Anda juga mendapatkan upvote saya untuk menambahkan definisi .spin
Blair Connolly

6

Satu-satunya jawaban yang memberikan 359deg yang benar:

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

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

Berikut adalah gradien yang berguna sehingga Anda dapat membuktikannya berputar (jika itu adalah lingkaran):

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

4

Untuk memutar, Anda dapat menggunakan bingkai kunci dan transformasi.

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

Contoh


4

Demi penyelesaian, berikut adalah contoh Sass / Kompas yang benar-benar memperpendek kode, CSS yang dikompilasi akan menyertakan awalan yang diperlukan, dll.

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

ini akan membuat Anda menjawab pertanyaan itu


Tampaknya ini hanya pengulangan dari jawaban yang ada ini .
Pang
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.