• 最終更新日
  • CSS

CSSのアニメーションで煙や湯気を表現!jQueryを使わずに簡単に実装できる

ちょっと面白いアニメーションがありますのでご紹介します。煙や湯気をCSSのアニメーションのみで表現できるというものです。意外とこういう効果はjQueryにもないです。

これもホームページならではの動きですね。雑誌などの紙媒体には表現できない効果なので、うまくサイトにハマれば表現の幅も広がってユーザーを惹き付ける事ができます。

このアニメーションでは温泉や温かい料理などに「湯気」を付けたり、煙突やタバコの「煙」を表現する事ができます。画像や設定をいろいろ変更しながら遊んでみてください。

煙や湯気をHTMLで構築する

それではさっそくHTMLの記述を紹介しますのでコピペしてみてください。

index.html

            
  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>CSSのアニメーションで湯気や煙を表現する</title>
  6. <link type="text/css" rel="stylesheet" href="css/style.css">
  7. </head>
  8. <body>
  9.   <div class="steamWrap">
  10.     <div class="steamBox">
  11.       <img src="img/dianxin.jpg" alt="可愛い点心">
  12.       <div class="steam01"><img src="img/steam01.png" alt="湯気"></div>
  13.       <div class="steam02"><img src="img/steam02.png" alt="湯気"></div>
  14.       <div class="steam03"><img src="img/steam01.png" alt="湯気"></div>
  15.     </div>
  16.   </div>
  17. </body>
  18. </html>

HTMLは簡単ですね。今回はCSSの外部ファイルを読み込む事にしますので、「style.css」の記述も記載してあります。alt属性の記述は特に要らないですが、一応書いておきます。消してもらっても構いません。

やりたい事は料理の写真に湯気をプラスして、より美味しそうに見せるという事です。

可愛い点心

今回はこの可愛らしい点心の写真に湯気を追加していきます。すでに湯気が出てるんですけどね(笑)。では「dianxin.jpg」をクリックして点心の画像をダウンロードしてください。

それと湯気の画像も「steam01.png」と「steam02.png」の2種類を使いますので、同じく画像のファイル名をクリックしてダウンロードしておいてください。

煙や湯気をCSSで調整する

続いてCSSを見ていきますので、ファイル名を「style.css」として保存しておきましょう。

style.css

            
  1. @charset "utf-8";
  2.  
  3. * {
  4.   padding: 0;
  5.   margin: 0;
  6.   box-sizing: border-box
  7. }
  8. @keyframes steam01 {
  9.   0% {
  10.     bottom: -600px;
  11.     filter: blur(16px);
  12.     transform: rotateY(0deg);
  13.     transform: scale(0.6, 1);
  14.     opacity: 0
  15.   }
  16.   11% { opacity: 0.1 }
  17.   33% {
  18.     transform: rotateY(40deg);
  19.     transform: scale(1, 1.4);
  20.     opacity: 0.5
  21.   }
  22.   66% {
  23.     transform: rotateY(10deg);
  24.     transform: scaleY(1.8, 1);
  25.     opacity: 0.4
  26.   }
  27.   100% {
  28.     bottom: 0;
  29.     filter: blur(20px);
  30.     transform: rotateY(60deg);
  31.     transform: scaleY(2, 1.8);
  32.     opacity: 0
  33.   }
  34. }
  35. @keyframes steam02 {
  36.   0% {
  37.     bottom: -400px;
  38.     filter: blur(16px);
  39.     transform: rotateY(0deg);
  40.     transform: scale(0.6, 0.6);
  41.     opacity: 0
  42.   }
  43.   11% { opacity: 0.1 }
  44.   33% {
  45.     transform: rotateY(40deg);
  46.     transform: scale(0.8, 1);
  47.     opacity: 0.4
  48.   }
  49.   66% {
  50.     transform: rotateY(2deg);
  51.     transform: scaleY(1, 1.2)
  52.   }
  53.   100% {
  54.     bottom: 0;
  55.     filter: blur(20px);
  56.     transform: rotateY(50deg);
  57.     transform: scaleY(1.2, 1.4);
  58.     opacity: 0
  59.   }
  60. }
  61. .steamWrap {
  62.   width: 740px;
  63.   margin: 100px auto 0
  64. }
  65. .steamBox {
  66.   width: 100%;
  67.   height: 100%;
  68.   position: relative;
  69.   overflow: hidden
  70. }
  71. .steamBox > img {
  72.   width: 100%;
  73.   display: block
  74. }
  75. .steam01 {
  76.   position: absolute;
  77.   right: 0;
  78.   animation: steam01 10s infinite linear;
  79.   opacity: 0
  80. }
  81. .steam02 {
  82.   position: absolute;
  83.   left: 0;
  84.   animation: steam02 14s infinite linear;
  85.   opacity: 0
  86. }
  87. .steam03 {
  88.   margin: auto;
  89.   position: absolute;
  90.   right: 0;
  91.   left: 0;
  92.   animation: steam02 12s infinite linear;
  93.   animation-delay: 6s;
  94.   opacity: 0
  95. }
  96. .steam01 img, .steam03 img {
  97.   width: 532px;
  98.   height: 800px
  99. }
  100. .steam02 img {
  101.   width: 399px;
  102.   height: 600px
  103. }

ちょっと長いですけどCSSの記述はこれだけでOKなのでコピペしておいてください。「@keyframes(キーフレーム)」を使って湯気のアニメーション設定をおこなっています。

キーフレームの中は「0%」「11%」「33%」「66%」「100%」の設定が記述されています。「0%」はアニメーションの始まりで、「100%」はアニメーションの終わりを意味します。

            
  1. @keyframes steam01 {
  2.   0% {
  3.     bottom: -600px;
  4.     filter: blur(16px);
  5.     transform: rotateY(0deg);
  6.     transform: scale(0.6, 1);
  7.     opacity: 0
  8.   }
  9.   11% { opacity: 0.1 }
  10.   33% {
  11.     transform: rotateY(40deg);
  12.     transform: scale(1, 1.4);
  13.     opacity: 0.5
  14.   }
  15.   66% {
  16.     transform: rotateY(10deg);
  17.     transform: scaleY(1.8, 1);
  18.     opacity: 0.4
  19.   }
  20.   100% {
  21.     bottom: 0;
  22.     filter: blur(20px);
  23.     transform: rotateY(60deg);
  24.     transform: scaleY(2, 1.8);
  25.     opacity: 0
  26.   }
  27. }

「11%」「33%」「66%」ではアニメーション途中の変化を設定しています。わかりやすく言うとこのアニメーションが100秒で動く場合、「11秒後」「33秒後」「66秒後」の変化を指定しているという事です。

不透明度を設定している「opacity」を見ると、始めは「0」ですが11%に達すると「0.1」となります。11%になるとパッと現れる訳じゃなくて、「0」~「0.1」になるまで徐々にフェードインします。

キーフレームでは設定した各ポイント同士を繋ぐアニメーションが自動で作られるんです。

ここで指定している要素について簡単に説明しておくと、「blur」はぼかしの設定、「rotateY」は縦軸回転の設定、「scale」は拡縮の設定、「scaleY」は縦軸拡縮の設定です。

このあたりの数値はご自由に変更してもらってアニメーションがどう変化するのかを確認して頂ければと思います。まずはこのままコピペしたもので動作確認まで行きましょう。

それではファイルが揃いましたので下記の階層のように設置してみてください。

湯気や煙を表現するファイルの設置場所

煙や湯気の動作を確認しよう

それでは湯気がどのように動作しているのかをご確認ください。写真にはせいろで蒸された点心が並んでいますが、湯気の効果でせいろの蓋を開けた直後のような演出ができます。

可愛い点心
湯気
湯気
湯気

どうでしょうか。湯気の効果でしずる感もアップしますし、アツアツの点心をイメージしてしまいますよね。今回は湯気の画像を3枚使用していますので、湯気を抑えたいなら画像を減らせばOKです。

そして湯気の画像を変える事によってまた違った湯気の立ち方も表現できます。実は今回使用した湯気の画像は「龍」です。全然、湯気の画像じゃないですが何となく似てますよね(笑)。

ドラゴンの湯気

左の龍が「steam01.png」で右の龍が「steam02.png」です。参考のために黒色の龍を表示しましたが、湯気の画像で使用しているのはカラーを白色に変更したものです。

湯気の画像はぼかしているのでハッキリとした元の輪郭はわからなくなります。illustratorやPhotoshopを操作できる方であればご自身で湯気の形を作られるのも良いかと思います。

そしてillustratorなどのソフトが使えない方でも、今回の龍のように無料素材を利用して湯気を表現する事ができます。なかなか面白いのでぜひ遊びながら試してみてください。

ホームページの簡単な作り方以外にも
お得な情報や日常を紹介するブログも是非どうぞ!
Webに関連するレンタルサーバーなどの特徴・料金比較や、
個人的に挑戦している資格取得についての勉強法やグルメなどを紹介しています。