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

DEMO

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

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, ở 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.

-------------------#####-------------------

Khóa học nên xem

Nguồn: freetuts.net