Trong một số giao diện đặc biệt, chúng ta sẽ cần tạo ra những hiệu ứng chuyên biệt. Hôm nay, kiso xin giới thiệu đến mọi người hiệu ứng tạo khói. Sau bài viết này mọi người có thể tạo được hiệu ứng như hình bên dưới
1. Phần HTML
Vẫn là thẻ div
chính cho phần bố cục, thêm vào đó là thẻ p
và thẻ span
.
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <title>Smoke</title> <meta name="viewport" content="width=device-width, initial-scale=1"> <link rel="stylesheet" type="text/css" media="screen" href="smoke.css"> <script src="main.js"></script> </head> <body> <div> <p> <span class="s1">S</span> <span class="s2">M</span> <span class="s3">O</span> <span class="s4">K</span> <span class="s5">E</span> </p> </div> </body> </html>
Do hiệu ứng này cần chỉ định trực tiếp lên các chữ cái, nên việc dùng thẻ span
là hợp lý và mỗi thẻ sẽ có một tên class riêng biệt.
Lưu ý các bạn có thể thay thế thẻ span
bằng thẻ khác, ở kiso ưu tiên dùng thẻ span
.
Bài viết này được đăng tại [kiso.vn]
2. Phần CSS
Trước hết hãy xem qua toàn bộ code.
div { height: 500px; display: flex; align-items: center; justify-content: center; } p { font-size: 50px; letter-spacing: -5px; } span { position: relative; animation: smoke 10s ease infinite; display: inline-block; transition: 2s ease-in-out; } .s1 { animation-delay: 0; } .s2 { animation-delay: 0.5s; } .s3 { animation-delay: 1s; } .s4 { animation-delay: 1.5s; } .s5 { animation-delay: 2s; } @keyframes smoke { 0% { transform: translate(0, 0) scale(1, 1) rotate(0deg); filter: blur(0); } 20% { filter: blur(5px); text-shadow: 5px 10px; } 40% { filter: blur(35px); text-shadow: 15px 20px; } 60% { filter: blur(55px); text-shadow: 25px 30px; } 80% { filter: blur(75px); text-shadow: 35px 40px; } 100% { transform: translate(-70px, -300px) scale(2, 4) rotate(360deg); filter: blur(100px); text-shadow: 45px 50px; } }
Bước 1: tạo định dạng cho thẻ div
div { height: 500px; display: flex; align-items: center; justify-content: center; }
Thiết lập các thuộc tính display
, align-items
, justify-content
như trên sẽ giúp các phần tử con canh giữa cả chiều dọc và ngang.
Lưu ý, giá trị height
được gán 500px
có thể theo đổi theo ý thích.
Bước 2: tạo định dạng cho thẻ p
p { font-size: 50px; letter-spacing: -5px; }
Chúng ta thiết lập một giá trị cho thuộc tính letter-spacing
vì từng chữ cái được để trong thẻ span
nên phải thu hẹp lại khoảng cách giữa các chữ cái cho hợp lý.
Bước 3: tạo định dạng cho thẻ span
span { position: relative; animation: smoke 10s ease infinite; display: inline-block; transition: 2s ease-in-out; }
Đây là định dạng chung cho tất cả các thẻ span
, thuộc tính display
được thiết lập lại thành inline-block
thay vì giá trị mặc định inline
. Sở dĩ làm như vậy vì các thuộc tính trong hiệu chỉ hoạt động đầy đủ khi một thẻ có thuộc tính display
khác inline
.
Bước 4: thiết lập độ trễ của hiệu ứng cho từng chữ cái
.s1 { animation-delay: 0; } .s2 { animation-delay: 0.5s; } .s3 { animation-delay: 1s; } .s4 { animation-delay: 1.5s; } .s5 { animation-delay: 2s; }
Bước này chỉ là canh chỉnh các giá trị thời gian để độ trễ từng chữ cái cho phù hợp.
Bước 5: tạo hiệu ứng khói
@keyframes smoke { 0% { transform: translate(0, 0) scale(1, 1) rotate(0deg); filter: blur(0); } 20% { filter: blur(5px); text-shadow: 5px 10px; } 40% { filter: blur(35px); text-shadow: 15px 20px; } 60% { filter: blur(55px); text-shadow: 25px 30px; } 80% { filter: blur(75px); text-shadow: 35px 40px; } 100% { transform: translate(-70px, -300px) scale(2, 4) rotate(360deg); filter: blur(100px); text-shadow: 45px 50px; } }
Hiệu ứng này khá rườm rà, vì kiso chia nhỏ ra 5 tỷ lệ để thuộc tính filter: blur(value)
và thuộc tính text-shadow
hoạt động mượt mà hơn.
Các thuộc tính translate
, scale
, rotate
để tạo cảm giác giống khói đang bay lên.
3. Lời Kết
Qua bài viết này, bạn có thể tạo được một hiệu ứng đặc biệt như hiệu ứng khói. Nó tạo cảm giác mới lạ cho người dùng cũng như làm cho trang web của bạn trở nên sống động hơn (một điều mà không thể thiếu trong thế giới công nghệ ngày nay). Cảm ơn các bạn, hẹn gặp lại trong bài viết tiếp theo.
Danh sách file tải về
Tên file tải về | Pass giải nén |
---|---|
Tạo hiệu ứng khói | kiso.vn hoặc gameportable.net |
Bài viết liên quan
[CSF-2] Một số thiết lập CSF, LFD
Hôm nay mình sẽ thực hiện một số thiết lập trên CSF Mở file config để sửa đổi một số tính năng dưới /etc/csf/csf.conf Nội dung chính1. Phần HTML2. Phần CSS3. Lời Kết1. Bảo vệ...
[CSF-1] Tăng bảo mật Server với ConfigServer Firewall (CSF)
Nội dung chính1. Phần HTML2. Phần CSS3. Lời Kết1. Khái niệm CSF: CSF (ConfigServer & Firewall) là một bộ ứng dụng hoạt động trên Linux như một firewall được phát hành miễn phí để tăng...
Sử dụng SSH Key với Gitlab và Github
Bài viết này mình sẽ hướng dẫn các bạn tạo ssh key cho Gitlab và Github SSH là gì? Secure Socket Shell là một giao thức mạng dùng để thiết lập kết nối mạng một...
Directory traversal vulnerabilities (phần 4)
Nội dung chính1. Phần HTML2. Phần CSS3. Lời KếtV. Phân tích và khai thác các lỗ hổng Directory traversal (tiếp) 5. Bypass lỗ hổng khi trang web sử dụng đường dẫn đầy đủ Xét đoạn...
Directory traversal vulnerabilities (phần 3)
Nội dung chính1. Phần HTML2. Phần CSS3. Lời KếtV. Phân tích và khai thác các lỗ hổng Directory traversal 1. Lỗ hổng xảy ra khi sử dụng các hàm đọc file và tin tưởng đầu...
Directory traversal vulnerabilities (phần 2)
Nội dung chính1. Phần HTML2. Phần CSS3. Lời KếtIII. Vì sao lỗ hổng Directory traversal xuất hiện? Với mỗi ngôn ngữ lập trình khác nhau, điểm xuất hiện các lỗ hổng Directory traversal cũng khác...