📌  相关文章
📜  如何使用 CSS 创建流星动画效果?(1)

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

如何使用 CSS 创建流星动画效果?

CSS 动画提供了创建各种动画效果的能力。本文将介绍如何使用 CSS 创建流星动画效果。

实现思路

创建流星动画效果需要以下步骤:

  1. 创建一个带有背景色的伪元素,作为流星的尾巴。
  2. 将尾巴定位到容器的底部。
  3. 创建一个带有背景色和边框的伪元素,作为流星的头部。
  4. 将头部定位到尾巴的顶部,并设置透明度为 0。
  5. 创建一个带有背景色的伪元素,作为流星的亮光部分。
  6. 将亮光部分定位在头部顶部,并设置透明度为 0。
  7. 创建一个动画,控制流星的位置和透明度。
代码实现

以下是实现流星动画效果的代码:

.container {
  position: relative;
  width: 200px;
  height: 200px;
}

.container::before {
  content: "";
  position: absolute;
  bottom: 0;
  left: 50%;
  width: 8px;
  height: 20px;
  background-color: #f8d34a;
  border-radius: 4px;
  transform: translateX(-50%);
}

.container::after {
  content: "";
  position: absolute;
  top: 0;
  left: 50%;
  width: 16px;
  height: 16px;
  background-color: #f8d34a;
  border-radius: 50%;
  border: 4px solid #fff;
  transform: translate(-50%, -50%);
  opacity: 0;
}

.container::before,
.container::after {
  animation: comet 2s ease-in-out infinite;
}

.container::before {
  animation-delay: -0.5s;
}

.container::after {
  animation-delay: 0.3s;
}

.container::before,
.container::after,
.container::before > div {
  animation-fill-mode: both;
}

.container > div {
  position: absolute;
  top: -6px;
  left: -6px;
  width: 28px;
  height: 28px;
  border-radius: 50%;
  background-color: rgba(255, 255, 255, 0.5);
  box-shadow: 0 0 10px rgba(255, 255, 255, 0.5);
  opacity: 0;
}

.container::before > div {
  animation: sparkle 2s ease-in-out infinite;
}

@keyframes comet {
  0% {
    transform: translateX(-100%) translateY(-100%) rotate(-45deg);
    opacity: 0;
  }
  50% {
    transform: translateX(0) translateY(0) rotate(0);
    opacity: 1;
  }
  100% {
    transform: translateX(100%) translateY(100%) rotate(45deg);
    opacity: 0;
  }
}

@keyframes sparkle {
  0%,
  100% {
    opacity: 0;
    transform: scale(1);
  }
  5%,
  95% {
    opacity: 1;
    transform: scale(1.2);
  }
}
解释代码
容器

为了让流星动画正确显示在页面上,需要创建一个容器。容器设置为相对定位,方便后面的绝对定位元素布局。

.container {
  position: relative;
  width: 200px;
  height: 200px;
}
流星尾巴

流星由两部分组成:尾巴和头部。首先创建尾巴,使用伪元素实现,并设置背景色、边框和圆角。

.container::before {
  content: "";
  position: absolute;
  bottom: 0;
  left: 50%;
  width: 8px;
  height: 20px;
  background-color: #f8d34a;
  border-radius: 4px;
  transform: translateX(-50%);
}
流星头部

创建头部,同样使用伪元素实现,并设置背景色、边框和圆角。

.container::after {
  content: "";
  position: absolute;
  top: 0;
  left: 50%;
  width: 16px;
  height: 16px;
  background-color: #f8d34a;
  border-radius: 50%;
  border: 4px solid #fff;
  transform: translate(-50%, -50%);
  opacity: 0;
}

头部需要放在尾巴的顶部,所以设置 top: 0。为了让头部在垂直方向居中,使用 transform: translate(-50%, -50%) 定位。

流星亮光部分

创建流星的亮光部分,同样使用伪元素实现,并设置背景色、圆角和透明度为 0。

.container::before > div {
  position: absolute;
  top: -6px;
  left: -6px;
  width: 28px;
  height: 28px;
  border-radius: 50%;
  background-color: rgba(255, 255, 255, 0.5);
  box-shadow: 0 0 10px rgba(255, 255, 255, 0.5);
  opacity: 0;
}

这里需要注意,亮光部分需要放在头部的顶部,所以使用伪元素 ::before 来实现。

创建动画

创建流星动画,控制流星的位置和透明度。将动画应用于容器的伪元素。

.container::before,
.container::after {
  animation: comet 2s ease-in-out infinite;
}

@keyframes comet {
  0% {
    transform: translateX(-100%) translateY(-100%) rotate(-45deg);
    opacity: 0;
  }
  50% {
    transform: translateX(0) translateY(0) rotate(0);
    opacity: 1;
  }
  100% {
    transform: translateX(100%) translateY(100%) rotate(45deg);
    opacity: 0;
  }
}

控制流星的动画分为三部分:

  1. 开始时,从左上角出发,并且不显示。
  2. 持续一段时间后,到达中间位置,显示出头部并且透明度为 1。
  3. 最后一段时间内,到达右下角,并且隐藏头部,同时透明度恢复为 0。

该动画使用 transform 属性来控制位置和角度,使用 opacity 属性来控制透明度。

为了让动画看起来更加真实,同时也增加亮光效果,除了以上动画外,还需要为亮光部分创建动画。

.container::before > div {
  animation: sparkle 2s ease-in-out infinite;
}

@keyframes sparkle {
  0%,
  100% {
    opacity: 0;
    transform: scale(1);
  }
  5%,
  95% {
    opacity: 1;
    transform: scale(1.2);
  }
}

这个动画使用 transform 属性来控制亮光部分的大小,同时使用 opacity 属性来控制透明度。动画效果是让亮光部分在每次流星经过时,闪烁一下。

总结

通过以上代码和解释,你现在应该理解了如何使用 CSS 创建流星动画效果。只需要几行 CSS 代码,就可以在页面上创建一个令人惊艳的效果。