CSS3 Spin Animation


158

Ich habe einige Demos überprüft und habe keine Ahnung, warum ich den CSS3-Spin nicht zum Laufen bringen kann. Ich verwende die neueste stabile Version von Chrome.

Die Geige: 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>

Antworten:


299

Um CSS3-Animation verwenden zu können, müssen Sie auch die tatsächlichen Animations-Keyframes definieren ( die Sie benannt habenspin ).

Weitere Informationen finden Sie unter https://developer.mozilla.org/en-US/docs/CSS/Tutorials/Using_CSS_animations

Nachdem Sie das Timing der Animation konfiguriert haben, müssen Sie das Erscheinungsbild der Animation definieren. Dies erfolgt durch Einrichten von zwei oder mehr Keyframes mithilfe der @keyframesat-Regel. Jeder Keyframe beschreibt, wie das animierte Element zu einem bestimmten Zeitpunkt während der Animationssequenz gerendert werden soll.


Demo unter 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
Sie erhalten das ✓, weil Sie es am besten erklärt haben und Sie die einzige Antwort sind, die alle vorangestellten Versionen enthält.
— Iambriansreed

53
Das ist super pingelig, aber Sie sollten es wirklich auf 359 Grad animieren lassen. 360 und 0 Grad sind radial gleich, sodass die Animation bei einer vollen Umdrehung so kurz angehalten wird.
— Adam Grant

1
@ AdamGrant Danke, das hat mir heute fast Kopfschmerzen bereitet lol
— mattslone

5
Sie möchten auf 359,9999999999 Grad animieren, nicht auf 359. Rotationsgrade sind ein kontinuierlicher Bereich von [0, 360]. Wenn Sie auf 359,0 drehen, wird zu Beginn jeder Drehung ein Häkchen von 1 Grad angezeigt, wenn sie sich von 359 auf 0 verzieht .
— mdonoughe

16
Um all diese Kommentare zu verdeutlichen, die falsche Informationen enthalten ... IST die ausgewählte Antwort ohne Änderungen RICHTIG. 0 und 360 Grad unterscheiden sich in den Augen des Browsers tatsächlich, sind aber immer noch der gleiche Punkt. Wenn Sie beispielsweise versuchen, es von 0 Grad auf 0 Grad (oder 360 Grad auf 360 Grad) zu drehen, wird es überhaupt nicht gedreht. Durch Drehen von 0 Grad auf 360 Grad wird der Browser angewiesen, das Objekt vor Abschluss der Animation um volle 360 ​​Grad zu drehen. Stellen Sie das ein animation-iteration-count: infinite;und Sie haben unendlich viele Frames in der Animation. Selbst eine 20-minütige Drehung sieht makellos und glatt aus.
— Jacurtis

28

Sie haben keine Keyframes angegeben. Ich habe es hier zum Laufen gebracht .

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

Damit kann man tatsächlich viele wirklich coole Sachen machen. Hier ist eine, die ich früher gemacht habe .

:) :)

NB Sie können überspringen, dass Sie alle Präfixe ausschreiben müssen, wenn Sie -prefix-free verwenden .


17

Ab dem neuesten Chrome / FF und unter IE11 ist das Präfix -ms / -moz / -webkit nicht mehr erforderlich. Hier ist ein kürzerer Code (basierend auf früheren Antworten):

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

Live-Demo: http://jsfiddle.net/9Ryvs/3057/


5
Kombinieren Sie Animationsregeln mit Kurzschrift animation: spin 4s linear infinite.
— Josh Habdas

10

HTML mit tollem Glyphicon.

<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
Sie erhalten auch meine Gegenstimme für das Hinzufügen der Definition für .spin
— Blair Connolly

6

Die einzige Antwort, die die richtigen 359 Grad ergibt:

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

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

Hier ist ein nützlicher Farbverlauf, damit Sie beweisen können, dass er sich dreht (wenn es sich um einen Kreis handelt):

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

4

Zum Drehen können Sie Keyframes und eine Transformation verwenden.

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

Beispiel


4

Der Vollständigkeit halber hier ein Sass / Compass-Beispiel, das den Code wirklich verkürzt. Das kompilierte CSS enthält die erforderlichen Präfixe usw.

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

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

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.