Trong CSS, animation-duration là thuộc tính xác định thời gian một chu kỳ của animation kéo dài bao lâu (tức là mất bao nhiêu thời gian để hoàn thành một lần chạy của animation).
@keyframes fadeIn {
from {
opacity: 0;
}
to {
opacity: 1;
}
}
.box {
animation-name: fadeIn;
animation-duration: 1.5s;
}
Trong ví dụ trên, .box sẽ chạy animation fadeIn trong vòng 1.5 giây.
— animation-delay
animation-delay trong CSS dùng để chỉ định khoảng thời gian chờ trước khi một animation bắt đầu chạy.
Khi phần tử được áp dụng animation, animation-delay giúp trì hoãn thời điểm animation bắt đầu, thay vì chạy ngay lập tức.
Có thể dùng số âm (-1s) để làm cho animation bắt đầu như thể nó đã chạy được một thời gian rồi.
.box {
animation-name: slideIn;
animation-duration: 2s;
animation-delay: 1s;
}
@keyframes slideIn {
from {
transform: translateX(-100%);
}
to {
transform: translateX(0);
}
}
.box sẽ chờ 1 giây sau khi được hiển thị, rồi mới bắt đầu chạy animation slideIn.
— animation-direction
animation-direction trong CSS là thuộc tính dùng để xác định hướng mà animation sẽ chạy, đặc biệt khi nó lặp lại nhiều lần.
Nó điều khiển xem animation chạy từ đầu đến cuối (bình thường), ngược lại (từ cuối về đầu), hay luân phiên qua lại mỗi lần lặp.
animation-direction: normal | reverse | alternate | alternate-reverse;
@keyframes move {
from { transform: translateX(0); }
to { transform: translateX(200px); }
}
.box {
animation-name: move;
animation-duration: 2s;
animation-iteration-count: infinite;
animation-direction: alternate;
}
Kết quả: .box sẽ di chuyển qua phải rồi trở lại vị trí ban đầu, lặp đi lặp lại.
Giá trị
Ý nghĩa
normal(mặc định)
Animation chạy từ đầu đến cuối (từ from đến to).
reverse
Animation chạy ngược lại (từ to về from).
alternate
Animation chạy bình thường, rồi ngược lại (lặp luân phiên).
alternate-reverse
Animation chạy ngược lại, rồi bình thường (cũng luân phiên).
— animation-fill-mode
animation-fill-mode trong CSS dùng để xác định trạng thái của phần tử trước khi animation bắt đầu và sau khi animation kết thúc.
Animation thường chỉ “tác động” trong thời gian nó chạy. Nhưng nếu bạn muốn phần tử giữ nguyên hiệu ứng sau khi kết thúc (hoặc trước khi bắt đầu), thì dùng animation-fill-mode.
@keyframes fadeIn {
from { opacity: 0; }
to { opacity: 1; }
}
.box {
animation-name: fadeIn;
animation-duration: 2s;
animation-fill-mode: forwards;
}
.box sẽ mờ dần từ 0 → 1 (opacity).
Sau khi animation kết thúc, nó vẫn giữ nguyên opacity: 1 nhờ forwards.
.box sẽ được áp dụng animation đó và mờ dần trong 2 giây.
— animation-timeline
animation-timeline là một thuộc tính mới trong CSS (hiện đang được chuẩn hóa theo CSS Scroll-Linked Animations), dùng để điều khiển tiến trình animation dựa trên một "timeline" tùy chỉnh — ví dụ: theo vị trí cuộn (scroll position) thay vì thời gian.
Thay vì animation chạy theo thời gian (animation-duration: 2s), bạn có thể cho nó chạy theo tiến độ scroll của trang, phần tử, hoặc một timeline khác.
Giá trị
Ý nghĩa
auto(mặc định)
Dùng timeline mặc định (thường là theo thời gian như bình thường).
none
Không gắn animation với timeline nào cả.
scroll()
Gắn animation theo tiến độ scroll (rất hay dùng với scroll-driven effects).
<custom-name>
Dùng một timeline bạn đã khai báo thủ công (dùng với @scroll-timeline).
Đây là ví dụ (giả lập - chỉ hỗ trợ trong một số trình duyệt như Chrome 115+ và cần bật experimental flags):
Animation fadeInkhông chạy theo thời gian mà chạy dựa trên vị trí scroll của người dùng.
Khi cuộn từ đầu đến cuối, .box sẽ mờ dần vào.
Nghiên cứu các thuộc tính transition
— transition-behavior
transition-behavior là một thuộc tính CSS dùng để kiểm soát hành vi của transition khi thuộc tính bị thay đổi, đặc biệt là khi sử dụng JavaScript hoặc khi thay đổi giữa các trạng thái lớp (class) trong DOM.
transition-behavior: normal | allow-discrete;
Giá trị
Ý nghĩa
normal(default)
Chỉ áp dụng transition cho những thuộc tính hỗ trợ hoạt ảnh liên tục (continuous transitions), như opacity, transform, v.v.
allow-discrete
Cho phép các thuộc tính không liên tục (discrete) như display, visibility, hoặc content cũng có thể "hiển thị theo cách chuyển tiếp" nếu trình duyệt hỗ trợ.
Nếu visibility được thay đổi (visible ↔ hidden), trình duyệt có thể xử lý nó một cách mượt nếu hỗ trợ allow-discrete.
Hiện tại (2024–2025), transition-behavior: allow-discretechưa được hỗ trợ rộng rãi ở tất cả các trình duyệt. Chủ yếu có mặt trên Chrome, Edge với các flag thử nghiệm.
Không có tác dụng nếu dùng với các thuộc tính vốn đã hỗ trợ transition như opacity, transform.
Khi nào dùng?
Khi bạn muốn một số thuộc tính như visibility, content, hoặc display có thể chuyển đổi mượt thay vì bật tắt đột ngột (nếu trình duyệt hỗ trợ).
Dùng kết hợp với @starting-style (trong CSS animation phức tạp).
transition-behavior là một tính năng tiềm năng, giúp kiểm soát tốt hơn cách transition hoạt động – đặc biệt cho những thuộc tính trước giờ không thể chuyển tiếp mượt. Nhưng bạn nên kiểm tra khả năng hỗ trợ trình duyệt trước khi dùng trong sản phẩm thực tế.
Nếu bạn đang làm animation mượt khi cuộn (với IntersectionObserver), bạn không cần dùng transition-behavior trừ khi bạn đang xử lý thuộc tính "cứng đầu" như visibility.
— transition-duration
transition-duration là một thuộc tính CSS dùng để xác định thời gian (tính bằng giây hoặc mili giây) mà transition sẽ mất để hoàn thành, tức là thời gian diễn ra hiệu ứng chuyển tiếp giữa hai trạng thái của một thuộc tính.
Nếu không khai báo transition-duration? Trình duyệt sẽ mặc định là 0s → không có hiệu ứng chuyển tiếp gì cả, chuyển đổi xảy ra ngay lập tức.
transition-duration
Thời gian chuyển tiếp (mượt hay tức thì)
Đơn vị
s (giây), ms (mili giây)
Mặc định
0s (không có chuyển tiếp)
— transition-timing-function
transition-timing-function là thuộc tính CSS dùng để xác định cách tốc độ của transition thay đổi trong suốt quá trình thực hiện — hay nói cách khác, nó điều khiển nhịp điệu (chuyển động nhanh/chậm/đều) của hiệu ứng.
Mặc định – bắt đầu chậm, tăng tốc, rồi chậm lại ở cuối
linear
Tốc độ đều từ đầu đến cuối
ease-in
Bắt đầu chậm, sau đó nhanh dần
ease-out
Bắt đầu nhanh, chậm dần về cuối
ease-in-out
Chậm ở cả đầu và cuối, nhanh ở giữa
cubic-bezier(x1, y1, x2, y2)
Tùy chỉnh đường cong tốc độ (chi tiết bên dưới)
`steps(n, start
end)`
.box {
transition: transform 0.5s ease-in-out;
}
Khi .box bị transform (ví dụ translate, scale...), nó sẽ:
Chuyển động chậm ban đầu → nhanh ở giữa → chậm ở cuối.
transition-delay là thuộc tính CSS dùng để chỉ định khoảng thời gian chờ trước khi hiệu ứng chuyển tiếp (transition) bắt đầu sau khi thuộc tính thay đổi.
👉 Khi opacity thay đổi, sẽ có hiệu ứng mờ trong 0.5 giây.
📌 Nếu bạn thay đổi thuộc tính khác như transform, sẽ không có hiệu ứng gì cả, vì không nằm trong transition-property.
📙 Dưới đây là một mini map ghi nhớ các thuộc tính CSS liên quan đến transition để bạn dễ hình dung và ghi nhớ:
Mind Map: Các thuộc tính CSS Transitio
transition-property là thuộc tính CSS dùng để chỉ định tên của (những) thuộc tính CSS sẽ được áp dụng hiệu ứng chuyển tiếp (transition) khi giá trị của chúng thay đổi.