Thiết kế chuyển động với CSS Animation

Ngày đăng: 12/02/2020   -    Cập nhật: 26/01/2021
Từ khi chúng ta có thể tạo hình động (Animation) trong CSS, nên việc xây dựng các trang web có hiệu ứng chuyển động mượt mà không còn quá khó khăn.


Đối với các trang web mà bạn đang thực hiện, đôi khi không cần phải đập đi xây lại.


Chỉ cần thêm một hoặc hai hiệu ứng animation để làm cho nó sinh động, thú vị hơn.



Lưu ý: Đừng lạm dụng CSS Animation mà khiến website trở thành con rùa.


Trong bài viết này, mình muốn cung cấp những phần quan trọng nhất để bạn có thể tạo ra hiệu ứng thú vị với CSS Animation.


Thiết kế chuyển động với CSS Animation

Thiết kế chuyển động với CSS Animation


Mình cũng làm một ví dụ nhỏ ở cuối bài viết này để bạn có thể tham khảo.


Mục lục:



1. Các thuộc tính Animation

2. Tìm hiểu về Keyframes

3. Tạo CSS Animation

4. Ví dụ CSS Animation thực tế


1. Các thuộc tính Animation



Việc thiết lập một animation được thực hiện bằng cách gán thuộc tính animation trong lúc viết css cho phần tử hoặc thuộc tính phụ của nó.


Để bắt đầu tạo ra các hiệu ứng chuyển động thú vị với CSS Animation, bạn phải biết cách thiết lập thời lượng (duration), thời gian (timing), độ trễ (delay) và một số thứ khác.



Để làm quen với các thuộc tính này và hiểu chúng có thể làm gì, hãy cùng xem chi tiết bên dưới đây:


Thuộc tính #1: animation-duration - Xác định thời gian cho một chu kỳ chuyển động, thường được đặt thành s hoặc ms.


Ví dụ: Chúng ta muốn thiết lập chu kỳ chuyển động là 4s, thế thì chúng ta sẽ thiết lập như sau: animation-duration: 4s


Thuộc tính #2: animation-delay - Xác định thời gian giữa thời điểm tải xong phần tử và bắt đầu chu kỳ chuyển động đầu tiên, nó cũng được đặt là s hoặc ms.


Ví dụ: Chúng ta muốn sau khi tải xong phần tử thì chờ 2 giây sau mới bắt đầu chu kỳ chuyển động đầu tiên: animation-delay: 2s


Thuộc tính #3: animation-iteration-count - Xác định có bao nhiêu chu kỳ chuyển động sẽ được lặp lại, nó có thể được đặt thành infinite nếu bạn muốn nó lặp lại mãi mãi.


Ví dụ: Chúng ta muốn lặp lại chuyển động 3 lần: animation-iteration-count: 3


Thuộc tính #4: animation-direction - Xác định nếu chuyển động sẽ thay đổi hướng hoặc bắt đầu ở cùng một nơi mỗi lần sau khi reset.


Nó có thể được đặt là một trong những từ khóa sau:



  • normal (mặc định): Chuyển động tiến về phía trước được bắt đầu từ 0% đến 100% trong một chu kỳ.
  • alternate: Chuyển động bắt đầu từ 0% đến 100% và chu kỳ tiếp theo là từ 100% đến 0%.
  • reverse: Chuyển theo hướng ngược lại, từ 100% đến 0%.
  • alternate-reverse: Chuyển động chu kỳ đầu tiên được phát từ 100% đến 0% và chu kỳ thứ hai sẽ được phát từ 0% đến 100%.


Thuộc tính #5: animation-name - Xác định tên của @keyframe


Những thuộc tính ở bên trên mà mình mô tả ở trên là phổ biến nhất và được sử dụng thường xuyên nhất.


Nhưng cũng có một vài thuộc tính ít phổ biến hơn cũng được sử dụng để thiết lập chuyển động.


Cùng lướt qua một chút nhé:




Thuộc tính #6: animation-timing-function - Xác định thời gian của các chuyển động, có nghĩa là thiết lập đường cong gia tốc để xác định chuyển động qua các keyframe.


  • ease - Chỉ định chuyển động với khởi đầu chậm, sau đó nhanh, sau đó kết thúc chậm (đây là mặc định)
  • linear - Chỉ định chuyển động có cùng tốc độ từ đầu đến cuối
  • easy-in - Chỉ định chuyển động chậm lúc đầu
  • easy-out - Chỉ định chuyển động chậm về cuối
  • easy-in-out - Chỉ định chuyển động với bắt đầu và kết thúc chậm
  • cub-bezier(n, n, n, n) - Cho phép bạn xác định các giá trị của riêng trong một hàm bezier


Thuộc tính #7: animation-fill-mode - Xác định các giá trị được áp dụng cho phần tử trước chuyển động và sau khi nó được thực thi.


Thuộc tính #8: animation-play-state - Cho phép tạm dừng và khởi động lại chuỗi chuyển động.


Ok,


Bây giờ bạn đã biết các thuộc tính CSS Animation làm gì, vì thế chúng ta có thể chuyển sang bước tiếp theo, đó là @keyframe.



2. Tìm hiểu về Keyframe



Để xác định hành vi tùy chỉnh cho phần tử, bạn phải thiết lập một chuỗi hành động.


Lúc này, bạn sẽ sử dụng quy tắc @keyframe.


Trong @keyframe, chúng ta chỉ định kiểu cho phần tử trong thời gian kết xuất cụ thể.


Chúng ta đang xác định kiểu ít nhất hai bước:



  • 0% là trạng thái bắt đầu
  • 100%, là trạng thái cuối cùng.


Chúng ta cũng có thể thay đổi:


  • 0% thành from
  • 100% thành to



Tất nhiên, vì có nhiều khả năng bạn sẽ xác định nhiều hơn hai bước, vì vậy chúng ta sử dụng tỷ lệ phần trăm để xác định kiểu cho từng phần của chu kỳ chuyển động.


Chúng ta hãy xem ví dụ về @keyframe, trong đó chúng ta sẽ xác định một keyframe để thay đổi chiều cao của phần tử:



@keyframe grow {
  0% { height: 20px }
  50% { height 60px }
  100% { height 100px }
}


Vì vậy, trong ví dụ trên, chúng ta đã tạo ra một keyframe gọi là grow.


Nó thay đổi chiều cao của phần tử từ 20px, đến giữa chu kỳ thì tăng đến 60px. Sau đó tiếp tục tăng đến 100px khi hết chu kỳ.



Mẹo: Thay vì thay đổi chiều cao (height), bạn có thể sử dụng thuộc tính transform: scaleY(). Vừa mượt mà hơn vừa đem lại hiệu suất tốt hơn.


Trong bước tiếp theo, chúng ta sẽ thêm chuyển động này vào phần tử HTML để bạn thấy cách nó hoạt động.


3. Tạo CSS Animation




Chúng ta có thể tạo một hình ảnh động bằng cách sử dụng viết tắt hoặc gán giá trị cho từng thuộc tính.


Để đặt nó thành một dòng, các thuộc tính sẽ được sắp xếp lần lượt như sau:


animationanimation-name, animation-duration, animation-timing-function, animation-delay, animation-iteration-count, animation-direction, animation-fill-mode, animation-play-state ;


Nếu bạn là người mới bắt đầu tìm hiểu về CSS và CSS Animation, mình khuyến nghị bạn gán giá trị riêng cho từng thuộc tính để dễ dàng nắm bắt.



Note: Như ví dụ bên dưới!


Ngoài ra, điều đáng ghi nhớ là animation-duration phải được thiết lập để làm cho animation hoạt động.


Nếu bạn không thiết lập animation-duration, thì bạn sẽ không thấy hiệu ứng gì cả.


Bây giờ, hãy thử thiết lập animation cho phần tử, như sau:



div {
  height: 10px;
  width: 20px;
  animation-name: grow;
  animation-duration: 5s;
  animation-delay: 2s;
  animation-iteration-count: infinite;
}


Trong đoạn code trên, chúng ta đã chỉ định một animation cho phần tử div.


  • animation-name: grow có nghĩa là phần tử sẽ chuyển động theo keyframe grow (mà ta đã định nghĩa ở trên)
  • animation-duration: 5s có nghĩa là chuyển động sẽ kéo dài 5s trên mỗi chu kỳ.
  • animation-delay: 2s có nghĩa là chuyển động sẽ bắt đầu sau 2 giây kể từ khi tải xong phần tử.
  • animation-interation-count: infinite có nghĩa là chuyển động sẽ lặp lại vô hạn.


Thiết lập một animation cũng rất dễ thôi phải không?


4. Ví dụ CSS Animation thực tế



Trong các bước trên, bạn đã học làm thế nào để thiết lập một hiệu ứng chuyển động animation.


Tại đây, hãy vận dụng nó để tạo ra một ví dụ thú vị nhé.


Chúng ta sẽ tạo ra một hiệu ứng loading...


Có rất nhiều cách để tạo ra một hiệu ứng loading sử dụng animation.


Như ví dụ bên dưới đâ, chúng ta sẽ tạo ra 4 hình vuông và thay đổi chiều cao của chúng để tạo ra hiệu ứng sóng.


Hãy tập trung vào thuộc tính animation-delay để thấy các hình vuông bắt đầu chuyển động theo thứ tự từ trái sang phải để tạo ra hiệu ứng chuyển tiếp.


Bạn cần nhớ, animation-delay quyết định sẽ chờ bao lâu (sau khi tải xong) để bắt bắt đầu hiệu ứng animation.



> Điểm này khá là quan trọng trong việc tối ưu hiệu suất Animation


Xin hãy nhìn vào ví dụ bên dưới để xem cách nó hoạt động thực sự:


Lưu ý: Bạn cần vào Codepen.io để vượt CAPTCHA trước. Sau đó quay lại F5 bài viết để xem ví dụ minh họa



See the Pen Ví dụ CSS Animation by NIIT -ICT Hà Nội (@niiticthanoi) on CodePen.


Lưu ý #1: Để xem được code bạn phải mở tab khác vào codepen.io và load lại bài viết này.


Lưu ý #2: Mình đã thêm thuộc tính animation-direction: alternate; để đảo chuyển động chạy ngược lại từ 100%.


Có nghĩa là:



  • Sau khi thay đổi kích thước từ 0% đến 100% thì...
  • Chu kỳ tiếp theo nó sẽ giảm từ 100% đến 0%...
  • Chu kỳ sau là từ 0% đến 100%
  • .... cứ thế.


Nếu bạn không thiết lập thuộc tính animation-direction thì sau khi thay đổi kích thước đến 100% thì nó sẽ quay lại ngay kích thước 0%.


Điều này khiến cho hiệu ứng không được mượt mà cho lắm.



Chúc mừng bạn đã biết sử dụng CSS Animation



Trong bài viết này, chúng ta đã cùng tìm hiểu về những thuộc tính quan trọng nhất của CSS Animation.


Đây là một phần mình thấy thú vị nhất trong lập trình Front end.


Mình cũng đã giải thích chi tiết từng thuộc tính CSS Animation có thể làm gì, keyframe hoạt động ra sao và giúp bạn thiết lập một CSS Animation thực thế.


Mình hy vọng bạn sẽ thấy bài viết này hữu ích, và sẽ sử dụng nó như là bước đầu tiên để xây dựng các hiệu ứng thú vị của riêng mình.


Còn nếu như bạn đã biết nhiều về CSS Animation, hãy chia sẻ những suy nghĩ của bạn về chúng trong phần bình luận để cùng thảo luận nhé.



Tham khảo:

KHÓA HỌC JAVA FULLSTACK (bao gồm cả Front end Back end) hoặc nếu bạn chỉ muốn học ngôn ngữ thì Tự học Lập trình Java tại đây!


---
HỌC VIỆN ĐÀO TẠO CNTT NIIT - ICT HÀ NỘI
Học Lập trình chất lượng cao (Since 2002). Học thực tế + Tuyển dụng ngay!
Đc: Tầng 3, 25T2, N05, Nguyễn Thị Thập, Cầu Giấy, Hà Nội
SĐT: 02435574074 - 0968051561
Email: hello@niithanoi.edu.vn
Fanpage: https://facebook.com/NIIT.ICT/
 
#niit #niithanoi niiticthanoi #hoclaptrinh #khoahoclaptrinh #hoclaptrinhjava #hoclaptrinhphp #java #php #python
Bình luận Facebook
Khóa học liên quan đến bài viết

Khóa học PHP Full stack [2023] cho người mới bắt đầu

96 giờ
Khóa học Lập trình PHP Full stack, phiên bản cập nhật lần thứ 8. Dạy Lập trình PHP bài bản từ Front end đến Back end + Laravel. Hướng dẫn làm 2 Dự Án Web lớn

KHÓA HỌC PYTHON HƯỚNG ĐỐI TƯỢNG

50 giờ
Khóa học giúp học viên sử dụng thành thạo ngôn ngữ Lập trình Python (3x). Hiểu và phát triển được Ứng dụng Web với Django Framework. Học thực hành với Giảng viên cao cấp.

Lập trình PHP với Laravel Framework

42 giờ
Khóa học Lập trình PHP với Laravel Framework được NIIT - ICT HÀ NỘI xây dựng nhằm hoàn thiện kỹ năng lập trình web các các bạn đã biết Lập trình Web PHP thuần.

Khóa học Java Full stack (IJFD)

104 giờ
Học lập trình Java Fullstack với khóa học được xây dựng theo lộ trình bài bản, từ JAVA CƠ BẢN đến JAVA WEB và nâng cao về JAVA FRAMEWORK như: Spring Boot, Hibernate
Mục lục
Đăng ký tư vấn
Nhân viên gọi điện tư vấn miễn phí sau khi đăng ký
Được cập nhật các ưu đãi sớm nhất
Hotline: 0383180086
Tên không được để trống
Số điện thoại không được để trống
Email không được để trống
Hãy đăng ký để nhận những thông tin mới nhất về học bổng mới nhất tại NIIT - ICT Hà Nội
top
Đóng lại Đăng ký học tại NIIT - ICT Hà Nội
6260+ học viên đã theo học tại NIIT - ICT Hà Nội và có việc làm tốt trong ngành lập trình. Nắm lấy cơ hội ngay hôm nay!
Chọn khóa học
  • KHÓA HỌC LẬP TRÌNH FRONT END VỚI REACT.JS
  • KHÓA HỌC LẬP TRÌNH PHP WEB
  • Khóa học PHP Full stack [2023] cho người mới bắt đầu
  • Khóa học BIG DATA với Hadoop và Spark
  • Khóa học Lập trình Android tại Hà Nội
  • [Tuyển sinh 2023] Lập trình viên Quốc tế DigiNxt
  • Khóa học Tiền lương & Phúc lợi (C&B Excel) tại Hà Nội
  • LẬP TRÌNH GAME
    • Khóa học Lập trình Game Unity
  • LẬP TRÌNH WEB FRONT END
    • KHÓA HỌC PYTHON HƯỚNG ĐỐI TƯỢNG
    • KHÓA HỌC ANGULAR & TYPESCRIPT (FRONT END)
  • LẬP TRÌNH WEB BACK END
    • LẬP TRÌNH JAVA WEB VỚI FRAME WORK
    • Lập trình Web với Django
    • Lập trình PHP với Laravel Framework
  • CHƯƠNG TRÌNH ĐÀO TẠO ỨNG DỤNG CÔNG NGHỆ
    • Khóa học Tiền lương & Phúc lợi (C&B Excel) tại TP HCM
  • LẬP TRÌNH WEB FULL STACK
    • Khóa học Java Full stack (IJFD)
  • LẬP TRÌNH MOBILE
    • FRONT-END VỚI REACTJS VÀ REACT NATIVE
    • Lập trình Android Nâng cao
  • ĐÀO TẠO CHO DOANH NGHIỆP
    • KHÓA HỌC BUSINESS ANALYSIC TỪ CƠ BẢN ĐẾN NÂNG CAO 2023
    • Khóa học Magento: Làm chủ CMS TMĐT lớn nhất
    • Khóa học IOT: Xây dựng Sản phẩm IOT với Raspberry Pi
    • Khóa học Automation Testing Chuyên nghiệp
  • KHÓA HỌC DỰ ÁN
    • Học sử dụng bộ Office: Word, Excel, Power Point, Mail chuyên nghiệp
  • KHÓA HỌC KHÁC
    • VBA Excel Toàn Tập (Cơ Bản - Nâng Cao)
    • VBA Excel Nâng cao
    • Khóa học JMeter: Performance Testing
    • Khóa học Tester đạt chuẩn Quốc tế ISTQB Foundation Level
    • Khoá Học Tester đạt chuẩn quốc tế ISTQB Advanced Level
Bạn chưa chọn khóa học cần đăng ký
Tên không được để trống
Số điện thoại không được để trống
Email không được để trống
Đăng ký học thành công!
Cảm ơn bạn đã đăng ký học tại NIIT - ICT HÀ NỘI!