CSS3 회전 애니메이션


161

꽤 많은 데모를 검토했지만 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>

답변:


304

CSS3 애니메이션을 사용하려면 실제 애니메이션 키 프레임 ( 이름 지정spin ) 도 정의해야합니다.

읽기 https://developer.mozilla.org/en-US/docs/CSS/Tutorials/Using_CSS_animations을 추가 정보를 원하시면

애니메이션의 타이밍을 구성한 후에는 애니메이션의 모양을 정의해야합니다. 이는 at- @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);}
}

10
✓ 가장 잘 설명하고 접두사가 붙은 모든 버전을 포함하는 유일한 답변이기 때문에 ✓를 얻습니다.
iambriansreed 2013

55
이것은 매우 까다 롭지 만 실제로 359도까지 애니메이션해야합니다. 360 도와 0 도는 방사형으로 동일하므로 애니메이션이 완전히 회전 할 때 너무 짧게 일시 중지됩니다.
Adam Grant

1
@AdamGrant 감사합니다, 이것은 거의 오늘 나에게 두통을 일으켰습니다 롤
mattslone

5
359가 아닌 359.9999999999로 애니메이션하려고합니다. 회전 각도는 [0, 360)의 연속 범위이며 359.0으로 회전하면 359에서 0으로 왜곡 될 때 모든 회전 시작시 1도 눈금이 표시됩니다. .
mdonoughe

16
잘못된 정보를 제공하는 이러한 모든 의견을 명확히하기 위해 ... 선택한 답변은 수정없이 정확합니다. 0 도와 360 도는 실제로 브라우저의 눈에는 다르지만 여전히 동일한 지점입니다. 예를 들어 0deg에서 0deg (또는 360deg에서 360deg)로 회전하려고하면 전혀 회전하지 않습니다. 0deg에서 360deg로 회전하면 애니메이션을 완료하기 전에 개체를 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);}   
}

이것으로 정말 멋진 일을 많이 할 수 있습니다. 여기에 제가 이전에 만든 것이 있습니다.

:)

NB -prefix-free 를 사용하면 모든 접두사를 작성하지 않아도됩니다 .


18

최신 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.
조쉬 Habdas

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에 대한 정의를 추가하는 내 upvote에 얻을
블레어 코놀리을

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

이것은 당신이 질문에 답하게 할 것입니다


이것은 기존 답변 의 반복으로 보입니다 .
Pang
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.