Hoạt hình Spin CSS3


158

Tôi đã xem xét khá nhiều bản demo và không biết tại sao tôi không thể sử dụng spin CSS3. Tôi đang sử dụng bản phát hành ổn định mới nhất của Chrome.

Câu đố: 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>

Câu trả lời:


299

Để sử dụng CSS3 Animation, bạn cũng phải xác định các khung hình chính hoạt hình thực tế ( mà bạn đặt tênspin )

Đọc https://developer.mozilla.org/en-US/docs/CSS/Tutorials/Using_CSS_animations để biết thêm

Khi bạn đã định cấu hình thời gian của hình động, bạn cần xác định diện mạo của hình động. Điều này được thực hiện bằng cách thiết lập hai hoặc nhiều khung hình chính bằng cách sử dụng @keyframesquy tắc. Mỗi khung hình chính mô tả cách phần tử hoạt hình sẽ hiển thị tại một thời điểm nhất định trong chuỗi hoạt ảnh.


Bản demo tại 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
Bạn nhận được ✓ vì bạn đã giải thích điều đó tốt nhất và bạn là câu trả lời duy nhất bao gồm tất cả các phiên bản tiền tố.
iambriansreed

53
Điều này là siêu nitpicky, nhưng bạn thực sự nên làm cho nó sinh động đến 359 độ. 360 và 0 độ là như nhau hoàn toàn, do đó, hình ảnh động sẽ tạm dừng rất nhanh trong một lượt đầy đủ.
Adam Grant

1
@AdamGrant Cảm ơn bạn, điều này gần như đã khiến tôi đau đầu ngày hôm nay lol
mattslone

5
Bạn muốn làm động đến 359.9999999999 độ, chứ không phải 359. Độ xoay là một phạm vi liên tục [0, 360) và nếu bạn xoay đến 359.0, bạn sẽ có một đánh dấu 1 độ khi bắt đầu mỗi vòng quay khi nó cong từ 359 đến 0 .
mdonoughe

16
Để làm rõ tất cả những bình luận đang cung cấp thông tin không chính xác ... câu trả lời được chọn LÀ ĐÚNG mà không cần sửa đổi. 0 và 360 độ thực sự khác nhau trong mắt trình duyệt, trong khi vẫn là cùng một điểm. Ví dụ: nếu bạn cố xoay nó từ 0deg sang 0deg (hoặc 360deg sang 360deg), nó sẽ không xoay vòng nào cả. Xoay nó từ 0deg sang 360deg báo cho trình duyệt biến đối tượng đầy đủ 360 độ trước khi hoàn thành hoạt hình. Đặt animation-iteration-count: infinite;và bạn sẽ có các khung vô hạn trong hình động. Ngay cả một vòng quay 20 phút sẽ trông hoàn hảo và mịn màng.
jacurtis

28

Bạn chưa chỉ định bất kỳ khung hình chính nào. Tôi đã làm cho nó hoạt động ở đây .

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

Bạn thực sự có thể làm nhiều thứ thực sự tuyệt vời với điều này. Đây là một cái tôi đã làm trước đó .

:)

NB Bạn có thể bỏ qua việc phải viết ra tất cả các tiền tố nếu bạn sử dụng -prefix miễn phí .


17

Kể từ Chrome / FF mới nhất và trên IE11, không cần tiền tố -ms / -moz / -webkit. Đây là một mã ngắn hơn (dựa trên các câu trả lời trước):

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

Bản trình diễn trực tiếp: http://jsfiddle.net/9Ryvs/3057/


5
Kết hợp các quy tắc hoạt hình với tốc ký animation: spin 4s linear infinite.
Josh Habdas

10

HTML với glyphicon phông chữ tuyệt vời.

<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
Bạn cũng nhận được upvote của tôi để thêm định nghĩa cho .spin
Blair Connolly

6

Câu trả lời duy nhất đưa ra chính xác 359deg:

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

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

Đây là một gradient hữu ích để bạn có thể chứng minh nó đang quay (nếu đó là một vòng tròn):

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

4

Để xoay, bạn có thể sử dụng các khung chính và một biến đổi.

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

Thí dụ


4

Để hoàn thành, đây là một ví dụ Sass / La bàn thực sự rút ngắn mã, CSS được biên dịch sẽ bao gồm các tiền tố cần thiết, v.v.

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

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

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.