Trình tạo animation CSS

Tiếp theo

Viết @keyframes từ đầu rất nhàm chán: bạn chọn phần trăm, đoán thuộc tính, tải lại, xem, rồi chỉnh sửa. Trình tạo này cung cấp sáu animation có sẵn (mờ dần, trượt lên, nảy, xoay, nhịp đập và lắc) và cho phép bạn đặt tên animation, thời lượng, easing, số lần lặp và hướng. Kết quả phát lại theo thời gian thực; khi ưng ý, bạn có thể sao chép khối @keyframes đã tạo và thuộc tính rút gọn animation.

Cách tạo animation CSS

  1. 1

    Chọn một preset

    Chọn một trong sáu animation có sẵn: mờ dần, trượt lên, nảy, xoay, nhịp đập hoặc lắc.

  2. 2

    Đặt tên cho animation

    Đặt cho keyframes một định danh CSS hợp lệ, ví dụ `cardIn` hoặc `fadeIn`. Tên này cũng được dùng trong thuộc tính rút gọn `animation`.

  3. 3

    Đặt thời lượng và số lần lặp

    Thời lượng tính bằng giây, easing (ease, ease-in, ease-out, ease-in-out, linear hoặc spring), số lần lặp (1, 2, 3 hoặc infinite) và hướng (normal, reverse, alternate hoặc alternate-reverse).

  4. 4

    Sao chép mã CSS

    Quy tắc `@keyframes` đã tạo và dạng rút gọn `animation:` sẵn sàng để dán vào bảng định kiểu của bạn.

Giải phẫu animation

@keyframes slide-in {
  0%   { transform: translateX(-100%); opacity: 0; }
  60%  { transform: translateX(10%);   opacity: 1; }
  100% { transform: translateX(0);     opacity: 1; }
}

.card {
  animation: slide-in 400ms cubic-bezier(0.22, 1, 0.36, 1) both;
}

Tám thuộc tính trong dạng rút gọn: animation-name duration timing-function delay iteration-count direction fill-mode play-state.

Lựa chọn easing

Trình tạo cung cấp sáu hàm easing:

Easing cubic-bezier() Cảm giác
linear không có Tốc độ không đổi
ease-in 0.42, 0, 1, 1 Bắt đầu chậm, kết thúc nhanh
ease-out 0, 0, 0.58, 1 Bắt đầu nhanh, kết thúc chậm
ease-in-out 0.42, 0, 0.58, 1 Chậm-nhanh-chậm
ease (mặc định) 0.25, 0.1, 0.25, 1 Mặc định nhẹ nhàng
spring 0.68, -0.55, 0.27, 1.55 Vượt qua đích rồi ổn định

Làm animation với đúng thuộc tính

Trình duyệt có thể làm animation với bất kỳ thuộc tính nào, nhưng chỉ một vài thuộc tính chạy mượt trên GPU mà không kích hoạt layout hoặc vẽ lại:

Rẻ (chỉ composite): transform, opacity, filter.

Đắt (layout/vẽ): width, height, top, left, margin, padding, background-color.

Animation sáu mươi khung hình mỗi giây trên widthtop có thể chạy trên phần tử nhỏ, nhưng sẽ giật trên điện thoại nếu bạn làm nhiều phần tử cùng lúc. Với chuyển động phức tạp, luôn ưu tiên transform: translate(...) thay cho top / left, và transform: scale(...) thay cho việc làm animation chiều rộng/chiều cao.

will-change: dùng tiết kiệm

Báo cho trình duyệt cấp trước một lớp composite có thể giúp chuyển động mượt hơn:

.card { will-change: transform; }

Nhưng nó tốn bộ nhớ. Hãy áp dụng ngay trước khi animation kích hoạt và gỡ bỏ khi xong. Đặt will-change: transform vĩnh viễn trên nhiều phần tử có thể gây hại nhiều hơn lợi.

Giảm chuyển động

Một số người dùng nhạy cảm với chuyển động và cài đặt tùy chọn hệ điều hành:

@media (prefers-reduced-motion: reduce) {
  .card {
    animation: none;
  }
}

Hãy tôn trọng thiết lập này. Cung cấp sự thay đổi trạng thái tức thì hoặc hiệu ứng mờ dần rất nhẹ để thay thế.

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

CSS dành cho chuyển động đơn giản, khai báo rõ ràng, dùng một lần. Web Animations API (element.animate()) dành cho điều khiển thời lượng bằng JavaScript, keyframes động, tạm dừng và kiểm soát phát lại. Cả hai đều chạy trên compositor; không bên nào nhanh hơn về bản chất.

Gần như luôn vì bạn đang làm animation với thuộc tính kích hoạt layout (width, top, margin) thay vì transform. Chuyển sang translate()scale(), tình trạng giật thường biến mất.

Có. animation: a 1s, b 1s 1s, c 1s 2s; chạy ba animation tuần tự nhờ độ trễ so le. Trình tạo này xuất ra một animation đơn lẻ, vì vậy bạn tự thêm các mục bổ sung vào dạng rút gọn. Với những chuỗi chuyển động phức tạp hơn, hãy dùng Web Animations API hoặc thư viện như GSAP.

Nó khiến phần tử nhận trạng thái from trước khi animation bắt đầu (trong thời gian trễ) và giữ trạng thái to sau khi animation kết thúc. Không có both, phần tử trở về kiểu trước animation khi nó hoàn tất. Trình tạo giữ dạng rút gọn tối giản, vì vậy hãy tự thêm fill mode nếu cần.

Công cụ liên quan