CSS3 Spin Animation


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>

Відповіді:


299

Щоб використовувати CSS3 Animation, ви також повинні визначити фактичні анімаційні ключові кадри ( які ви назвалиspin )

Прочитайте https://developer.mozilla.org/en-US/docs/CSS/Tutorials/Using_CSS_animations для отримання додаткової інформації

Після налаштування часу анімації потрібно визначити зовнішній вигляд анімації. Це робиться шляхом встановлення двох або більше ключових кадрів за допомогою @keyframesправила at. Кожен ключовий кадр описує, як анімований елемент повинен відображатися в заданий час під час послідовності анімації.


Демонстрація на 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 Дякую, це мало не завдало мені головного болю сьогодні lol
mattslone

5
Ви хочете анімувати до 359,9999999999 градусів, а не до 359. Ступені обертання - це безперервний діапазон [0, 360), і якщо ви повернетесь до 359,0, у вас буде галочка на 1 градус на початку кожного обертання, коли він перевертається з 359 до 0 .
mdonoughe

16
Щоб уточнити всі ці коментарі, які дають неправильну інформацію ... обрана відповідь ПРАВИЛЬНА без змін. 0 і 360 град насправді різні в очах браузера, при цьому все ще залишаються однаковими. Наприклад, якщо ви спробуєте повернути його від 0deg до 0deg (або 360deg до 360deg), він взагалі не обертається. Поворот його від 0 до 360 градусів сповіщає браузер повернути об'єкт на 360 градусів перед завершенням анімації. Встановітьanimation-iteration-count: infinite; і у вас буде нескінченна кількість кадрів в анімації. Навіть 20-хвилинне обертання виглядатиме бездоганно та плавно.
jacurtis

28

Ви не вказали жодних ключових кадрів. Я змусив це працювати тут .

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

Насправді ви можете зробити дуже багато цікавих речей з цим. Ось один я зробив раніше .

:)

Примітка. Ви можете пропустити, щоб записати всі префікси, якщо використовуєте -prefix-free, .


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

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.