CĂN BẢN
CSS3
CSS RESPONSIVE
CSS PARALLAX
CÁC CHỦ ĐỀ
BÀI MỚI NHẤT
Dự án mới của mình là gamehow.net, mời anh em ghé thăm và góp ý ạ.

Tạo hiệu ứng khói với HTML và CSS

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, freetuts 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

tao hieu ung khoi voi html va css JPG

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.

banquyen png
Bài viết này được đăng tại freetuts.net, không được copy dưới mọi hình thức.
<!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, ở freetuts ưu tiên dùng thẻ span.

2. Phần CSS

Trước hết hãy xem qua toàn bộ code.

Xem demo RUN
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ì freetuts 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.

Tổng hợp dữ liệu trong bài:

Cùng chuyên mục:

Validate form bằng HTML5

Validate form bằng HTML5

Trước đây chúng ta hay validate form bằng Javascript, nhưng ...

Thẻ aside trong HTML5

Thẻ aside trong HTML5

Mình cũng không rõ người ta tạo ra thẻ này làm gì, nhưng nếu xét…

Thẻ hgroup trong HTML5

Thẻ hgroup trong HTML5

hgroup là một thẻ được thêm vào kể từ phiên bản ...

Thẻ header trong HTML5

Thẻ header trong HTML5

Nếu nhìn qua một trang web được xây dựng bằng HTML5 thì bạn ...

Các thẻ HTML tạo form thu thập dữ liệu

Các thẻ HTML tạo form thu thập dữ liệu

Trước khi bắt đầu thì bạn phải hiểu khái niệm form dữ liệu là ...

Tạo background và đường viền cho thẻ HTML

Tạo background và đường viền cho thẻ HTML

Để tạo màu nền cho một thẻ HTML bất kì thì ta sử dụng thuộc…

Tạo menu một cấp bằng HTML đơn giản

Tạo menu một cấp bằng HTML đơn giản

Để làm menu 1 cấp thì có rất nhiều giải pháp. Bạn có thể sử…

Tạo HTML danh sách bài viết đơn giản

Tạo HTML danh sách bài viết đơn giản

Mục đích mình đưa ra bài tập này là giúp các bạn hiểu được cách…

Tạo bổ cục layout HTML đơn giản

Tạo bổ cục layout HTML đơn giản

Qua bài học này bạn sẽ biết cách tạo một file style riêng để ..

Phân biệt ID và Class trong HTML

Phân biệt ID và Class trong HTML

Mỗi thẻ HTML đều có những thuộc tính riêng và khác nhau. Tuy nhiền ..

Cách dùng thẻ div trong HTML để tạo các khối giao diện

Cách dùng thẻ div trong HTML để tạo các khối giao diện

Thẻ div đóng vai trò rất quan trọng, nó được dùng để tạo ...

Phân biệt thẻ HTML Block và Inline

Phân biệt thẻ HTML Block và Inline

Có bao giờ bạn thắc mắc rằng, tại sao nội dung ...

Thuộc tính style trong HTML

Thuộc tính style trong HTML

Do chúng ta chưa học CSS nên mình sẽ không nói ...

Thẻ title trong HTML

Thẻ title trong HTML

Cách sử dụng thẻ title html ...

Thẻ style trong HTML

Thẻ style trong HTML

Style là một thẻ HTML bình thường, nó có công dụng là xác ...

Thẻ base trong HTML

Thẻ base trong HTML

Cách sử dụng thẻ base trong html ...

Thẻ link trong HTML

Thẻ link trong HTML

Cách sử dụng thẻ html ...

Thẻ meta trong HTML

Thẻ meta trong HTML

Cách sử dụng thẻ meta html ...

Thẻ script trong HTML

Thẻ script trong HTML

Cách sử dụng thẻ script html ...

Thẻ noscript trong HTML

Thẻ noscript trong HTML

Cách sử dụng thẻ noscript html ...

Top