Trình tạo hoạt ảnh CSS

Xây dựng hoạt ảnh CSS @keyframes một cách trực quan · chọn cài đặt sẵn hoặc tùy chỉnh thời lượng, biến đổi và đường cong. Sao chép mã sẵn sàng cho sản xuất.

Cài đặt sẵn

Cài đặt

Xem trước

Hộp

CSS được tạo

Cách sử dụng

  1. Chọn một cài đặt sẵn hoạt ảnh: chọn từ các hoạt ảnh phổ biến, mờ dần, trượt, nảy, xoay, đập, rung và nhiều hơn nữa.
  2. Tùy chỉnh thời lượng và hành vi: điều chỉnh thời lượng, độ trễ, hàm easing, số lần lặp và fill mode.
  3. Sao chép CSS: định nghĩa @keyframes hoàn chỉnh và thuộc tính animation rút gọn sẵn sàng để dán vào stylesheet của bạn.

Tại sao sử dụng trình tạo hoạt ảnh CSS?

Hoạt ảnh CSS làm cho giao diện sống động, thu hút sự chú ý đến các phần tử quan trọng, cung cấp phản hồi trực quan và tạo trải nghiệm người dùng mượt mà. Viết các quy tắc @keyframes bằng tay đòi hỏi phải biết cú pháp đúng, tên đường cong và các tổ hợp thuộc tính phù hợp. Trình tạo này cung cấp các cài đặt sẵn hoạt ảnh tinh tế với xem trước trực tiếp và cho phép bạn điều chỉnh từng tham số, tạo ra CSS sẵn sàng cho sản xuất mà không cần JavaScript hay thư viện hoạt ảnh.

Tính năng

Câu hỏi thường gặp

Sự khác biệt giữa animation và transition trong CSS là gì?

Các transition CSS được kích hoạt bởi các thay đổi trạng thái (di chuột, focus, chuyển đổi class) và animate giữa hai trạng thái. Các hoạt ảnh CSS sử dụng @keyframes để xác định nhiều trạng thái và chạy độc lập với tương tác người dùng, chúng có thể lặp, đảo ngược và tự động bắt đầu.

animation-fill-mode là gì và tại sao nó quan trọng?

animation-fill-mode kiểm soát xem phần tử có giữ các kiểu của hoạt ảnh trước khi nó bắt đầu (backwards), sau khi nó kết thúc (forwards), hoặc cả hai. Không có forwards, phần tử trở về kiểu gốc đột ngột vào cuối hoạt ảnh.

Hoạt ảnh CSS có hiệu suất tốt không?

Các hoạt ảnh chỉ sử dụng transform và opacity được tăng tốc bởi GPU và rất mượt. Tránh animate các thuộc tính bố cục như width, height, margin hoặc top/left, chúng kích hoạt tính toán lại layout và có thể gây giật. Hãy giữ ở transform và opacity cho 60 fps.

Animation CSS thực sự làm gì

Animation CSS nội suy một hoặc nhiều thuộc tính CSS giữa các khung hình chính được xác định theo thời gian, tạo ra chuyển động hoặc thay đổi có thể nhìn thấy mà không cần JavaScript. Mô hình có hai phần: quy tắc @keyframes xác định animation trông như thế nào ở các bước dựa trên phần trăm (0% đến 100%), và thuộc tính shorthand animation (hoặc các anh em longhand của nó animation-duration, animation-delay, animation-timing-function, animation-iteration-count, animation-fill-mode) cho trình duyệt biết cách phát định nghĩa keyframes đó. Trình duyệt xử lý tất cả nội suy, easing, và thời gian khung hình trong C++, thường được tăng tốc GPU cho các thay đổi transform và opacity.

Animation khác với transition CSS theo hai cách. Transition kích hoạt khi trạng thái của một phần tử thay đổi (một hover, một class toggle, một sự kiện focus) và nội suy giữa chính xác hai giá trị: cũ và mới. Animation chạy độc lập với trạng thái, theo sau một số lượng bước keyframe tùy ý, có thể lặp vô thời hạn, có thể chạy ngược, và có thể được kích hoạt, tạm dừng và tiếp tục thông qua CSS hoặc JavaScript. Transition là công cụ phù hợp cho "snap từ A đến B trong nửa giây"; animation là công cụ phù hợp cho "lặp lại pulse thu hút sự chú ý này mãi mãi" hoặc "phát chuỗi entry này một lần khi phần tử xuất hiện."

Đối với thiết kế web hiện đại, animation CSS thay thế một lượng lớn những gì từng yêu cầu thư viện JavaScript. Spinner, fade-in, slide-up, pulse chú ý, dấu kiểm thành công: tất cả hiện là các mẫu CSS tiêu chuẩn. Sự đánh đổi là khả năng biểu đạt cho các chuỗi phức tạp. Animation CSS có thể làm nhiều việc nhưng ngừng thuận tiện xung quanh 5 đến 7 bước keyframe với các thay đổi thuộc tính đồng bộ; cho các animation được lên storyboard, chuỗi liên kết scroll, hoặc bất cứ điều gì động phụ thuộc vào trạng thái JavaScript, các thư viện chuyên dụng (GSAP, Framer Motion, Web Animations API) vẫn là lựa chọn tốt hơn.

Cách công cụ này hoạt động dưới mui xe

Khi bạn chọn một preset (ví dụ "bounce" hoặc "fade-in") công cụ tải một chuỗi @keyframes được xác định trước vào khu vực xem trước và áp dụng thuộc tính animation cho hộp xem trước. Các keyframe là CSS thực, không phải định dạng tùy chỉnh: những gì bạn thấy là những gì bạn nhận được để sao chép. Các slider cập nhật các giá trị thời gian animation (duration, delay, iteration count) bằng cách chỉnh sửa thuộc tính animation inline trong thời gian thực, vì vậy xem trước phản ánh mọi thay đổi ngay lập tức mà không tải lại trang.

Việc lựa chọn hàm easing sử dụng các giá trị timing-function CSS tiêu chuẩn: linear (tốc độ không đổi), ease (mặc định, bắt đầu và kết thúc chậm), ease-in (bắt đầu chậm), ease-out (kết thúc chậm), ease-in-out (bắt đầu và kết thúc chậm), hoặc cubic-bezier(x1, y1, x2, y2) cho các đường cong tùy chỉnh. Đường cong animation có thể nhìn thấy được tính toán bởi triển khai timing-function gốc của trình duyệt; xem trước là đầu ra được trình duyệt render thực tế, không phải mô phỏng JavaScript.

Hộp mã hiển thị CSS đầy đủ bạn cần để đưa vào một stylesheet: cả khối @keyframes và khai báo .your-class { animation: ... }. Nhấp "Copy CSS" và cả hai được ghi vào clipboard của bạn dưới dạng một khối văn bản duy nhất. Không có tệp nào được tạo, không có máy chủ nào xử lý bất cứ điều gì, và công cụ không có backend để gọi. Xem trước, tạo mã, và ghi clipboard đều xảy ra trong JavaScript trên thiết bị của bạn. Làm mới trang và cấu hình tùy chỉnh của bạn sẽ biến mất trừ khi bạn sao chép nó trước.

Lịch sử ngắn của animation web

Quy trình làm việc thực tế

Các cạm bẫy phổ biến và ý nghĩa của chúng

Quyền riêng tư: mọi thứ chạy trong trình duyệt của bạn

Các công cụ trình tạo CSS có hai loại: trang HTML đơn giản chạy JavaScript phía máy khách (riêng tư, nhanh) và trình chỉnh sửa đám mây lưu các dự án của bạn (cộng tác nhưng có sự đánh đổi về quyền riêng tư). Công cụ này là loại đầu tiên. Các giá trị slider, preset đã chọn, CSS được tạo: tất cả đều ở trong phiên trình duyệt của bạn. Làm mới trang và trạng thái biến mất trừ khi bạn sao chép CSS trước. Không có máy chủ nào lưu các lựa chọn animation của bạn, không có phân tích nào theo dõi các preset bạn đã thử nghiệm, và không cần tài khoản.

Thuộc tính quyền riêng tư quan trọng chủ yếu đối với công việc thiết kế độc quyền. Một studio prototyping animation cho dự án khách hàng bí mật, một nhà phát triển đang làm việc trên các tương tác vi mô của ứng dụng chưa công bố, hoặc một nhà thiết kế đang lặp lại trên chiến dịch thương hiệu: bất kỳ bối cảnh nào mà lịch sử lặp lại hoặc thiết kế đang tiến hành có thể tiết lộ thông tin về công việc. Với công cụ này, không có gì được ghi lại vì không có gì được gửi đi. Mở tab Network của trình duyệt và bạn sẽ thấy không có yêu cầu đi ra trong quá trình sử dụng; chỉ có lượt tải trang ban đầu lấy HTML và JavaScript.

Khi công cụ khác là lựa chọn phù hợp

Các câu hỏi thường gặp khác

Làm thế nào để làm cho một animation chỉ phát một lần?

Đặt animation-iteration-count: 1 (là mặc định nếu không được chỉ định). Để làm cho phần tử ở lại trạng thái cuối cùng của animation sau khi nó hoàn thành (thay vì snap trở lại kiểu ban đầu), cũng đặt animation-fill-mode: forwards. Shorthand kết hợp là animation: fadeIn 0.5s ease-out forwards;.

Tôi có thể tạm dừng và tiếp tục một animation không?

Có, với animation-play-state: paused (hoặc running). Bật/tắt thuộc tính này qua JavaScript (ví dụ, khi nhấp nút) hoặc trong CSS qua :hover cho các mẫu "tạm dừng khi hover". Animation đóng băng tại điểm hiện tại của nó và tiếp tục từ đó khi được đặt trở lại running, không mất tiến trình. Điều này hoạt động tương tự trong transition nhưng chỉ thuộc tính animation-play-state tồn tại cho kiểm soát tạm dừng runtime.

Làm thế nào để kích hoạt một animation khi nhấp hoặc scroll?

Đối với trình kích hoạt nhấp, bật/tắt một lớp CSS qua JavaScript: element.classList.toggle('animate-in'). Animation chạy khi lớp được thêm vào. Đối với trình kích hoạt scroll, sử dụng IntersectionObserver để phát hiện khi phần tử vào viewport và thêm lớp khi đó. Đối với các trình duyệt hiện đại, CSS Scroll-driven Animations cho phép bạn liên kết tiến trình animation trực tiếp với vị trí scroll mà không cần JavaScript thông qua animation-timeline: scroll().

Tại sao animation của tôi nhấp nháy hoặc giật cục?

Hầu hết các vấn đề nhấp nháy/giật cục đến từ việc animate các thuộc tính kích hoạt layout (width, height, top/left) thay vì các tương đương dựa trên transform. Chuyển left: 0 thành transform: translateX(0) và animation sẽ mượt mà hơn. Các nguyên nhân khác: overdraw từ nhiều lớp bán trong suốt, layout thrashing từ JavaScript đọc và ghi styles trong cùng một khung hình, hoặc các bóng và bộ lọc quá mức trên phần tử được animate.

Tôi có nên sử dụng animation trên các giao diện quan trọng đối với khả năng tiếp cận không?

Sử dụng chúng, nhưng tôn trọng prefers-reduced-motion. Hướng dẫn WCAG 2.1 khuyến nghị cung cấp tùy chọn để tắt chuyển động không cần thiết. Bọc các animation trang trí trong @media (prefers-reduced-motion: no-preference) để người dùng đặt tùy chọn OS có được trải nghiệm tĩnh. Animation phản hồi cần thiết (chỉ báo tải, rung lỗi) có thể được giữ; các animation thuần túy trang trí nên là opt-in cho người dùng nhạy cảm.

Tôi có thể sử dụng cubic-bezier cho các đường cong easing tùy chỉnh không?

Có. Hàm timing cubic-bezier(x1, y1, x2, y2) cho phép bạn xác định bất kỳ đường cong easing nào với hai điểm kiểm soát. Mỗi giá trị x nằm giữa 0 và 1 (đại diện cho thời gian), giá trị y có thể âm hoặc lớn hơn 1 (cho phép các hiệu ứng overshoot và bounce). Sử dụng công cụ Cubic Bezier của chúng tôi hoặc cubic-bezier.com cổ điển của Lea Verou để chọn đường cong một cách trực quan. Các lựa chọn thay thế preset phổ biến: ease, ease-in, ease-out, ease-in-out, và các biến CSS linear-aliased cubic-bezier(0.25, 0.1, 0.25, 1) (ease mặc định).

Công cụ liên quan

Trình tạo gradient CSS Trình tạo Cubic Bezier CSS Trình tạo bộ tải / Spinner CSS Trình tạo CSS Flexbox