📜  使用 CSS 的篝火动画效果(1)

📅  最后修改于: 2023-12-03 15:36:27.320000             🧑  作者: Mango

使用 CSS 的篝火动画效果

在网页设计中,动画效果可以让页面更加生动和有趣,吸引用户的注意力,提高用户体验。而CSS动画是实现网页动画效果的一种方法。本文将介绍如何使用CSS实现一个简单的篝火动画效果。

实现方法
HTML结构

首先,我们需要先构建一个HTML结构,用来放置篝火火焰和木柴。以下是一个简单的HTML结构:

<div class="campfire">
  <div class="campfire-fire">
    <span></span>
    <span></span>
    <span></span>
    <span></span>
    <span></span>
    <span></span>
  </div>
  <div class="campfire-wood">
    <span></span>
    <span></span>
    <span></span>
    <span></span>
    <span></span>
    <span></span>
  </div>
</div>
CSS样式

接下来,我们需要为HTML结构添加CSS样式,来实现篝火动画效果。以下是CSS样式的代码片段:

.campfire {
  position: relative;
  width: 300px;
  height: 200px;
}
.campfire-fire {
  position: absolute;
  width: 200px;
  height: 200px;
  bottom: 0;
  left: 50%;
  transform: translate(-50%, 50%);
  background: radial-gradient(yellow 70%, transparent 70%);
  border-radius: 50%;
  box-shadow: 0 0 10px orange,
              0 0 20px orange,
              0 0 30px orange,
              0 0 40px orange,
              0 0 50px orange,
              0 0 60px orange;
  animation: fire 1s linear infinite alternate;
}
.campfire-fire span {
  position: absolute;
  width: 5px;
  height: 100px;
  bottom: 0;
  left: 50%;
  transform: translateX(-50%);
  background: orange;
  animation: fire-span 1s linear infinite alternate;
}
.campfire-fire span:nth-child(1) {
  height: 70px;
  animation-delay: 0.2s;
}
.campfire-fire span:nth-child(2) {
  height: 90px;
  animation-delay: 0.4s;
}
.campfire-fire span:nth-child(3) {
  height: 80px;
  animation-delay: 0.6s;
}
.campfire-fire span:nth-child(4) {
  height: 95px;
  animation-delay: 0.8s;
}
.campfire-fire span:nth-child(5) {
  height: 75px;
  animation-delay: 1s;
}
.campfire-fire span:nth-child(6) {
  height: 85px;
  animation-delay: 1.2s;
}
.campfire-wood {
  position: absolute;
  width: 30px;
  height: 100px;
  bottom: 0;
  left: 50%;
  transform: translateX(-50%);
  background: brown;
  border-radius: 10px;
  box-shadow: 0 5px 0 black;
}
.campfire-wood span {
  position: absolute;
  width: 5px;
  height: 10px;
  top: -10px;
  left: 50%;
  transform: translateX(-50%);
  background: brown;
  border-radius: 10px;
  box-shadow: 0 5px 0 black;
}
.campfire-wood span:nth-child(1) {
  top: -15px;
  animation: wood-span 1s linear infinite alternate;
  animation-delay: 0.1s;
}
.campfire-wood span:nth-child(2) {
  top: -12px;
  animation: wood-span 1s linear infinite alternate;
  animation-delay: 0.3s;
}
.campfire-wood span:nth-child(3) {
  top: -18px;
  animation: wood-span 1s linear infinite alternate;
  animation-delay: 0.5s;
}
.campfire-wood span:nth-child(4) {
  top: -17px;
  animation: wood-span 1s linear infinite alternate;
  animation-delay: 0.7s;
}
.campfire-wood span:nth-child(5) {
  top: -14px;
  animation: wood-span 1s linear infinite alternate;
  animation-delay: 0.9s;
}
.campfire-wood span:nth-child(6) {
  top: -19px;
  animation: wood-span 1s linear infinite alternate;
  animation-delay: 1.1s;
}
@keyframes fire {
  from {
    transform: scale(1);
  }
  to {
    transform: scale(1.1);
  }
}
@keyframes fire-span {
  from {
    transform: scaleY(1);
  }
  to {
    transform: scaleY(1.2);
  }
}
@keyframes wood-span {
  from {
    transform: scaleY(1);
  }
  to {
    transform: scaleY(0.8);
  }
}
描述

上述代码实现了一个简单的篝火动画效果,包括火焰和木柴。相信大家看了代码之后已经基本明白了各个属性的作用,这里简要介绍一下主要的几个属性和动画效果。

  • position: relative;position: absolute;用来设置元素的定位方式。
  • width: xxxpx;height: xxxpx;用来设置元素的宽度和高度。
  • bottom: 0;left: 50%;用来设置元素的位置,其中left: 50%;表示元素水平居中。
  • transform: translate(-50%, 50%);用来设置元素的偏移量,其中translate(-50%, 50%);表示元素向左偏移50%,向下偏移50%。
  • background: radial-gradient(yellow 70%, transparent 70%);用来设置元素的背景色和径向渐变。
  • border-radius: 50%;用来设置元素的圆角。
  • box-shadow:用来设置元素的阴影效果。
  • animation:用来设置元素的动画效果,包括动画名称、动画持续时间、动画速度曲线、动画播放次数等。
  • @keyframes用来定义动画效果的关键帧。

在上述代码中,分别定义了三个动画:firefire-spanwood-spanfire动画控制整个火焰的大小和形状;fire-span动画控制每个火焰的大小和形状;wood-span动画控制每个木柴的大小和形状。

最终效果

最终实现的效果如下图所示:

campfire

总结

使用CSS实现动画效果,不仅可以提高网页的视觉效果和用户体验,而且还能减少使用JavaScript等其他技术的成本和复杂度。希望本篇文章能够帮助初学者更好地掌握CSS动画的使用方法。