📅  最后修改于: 2023-12-03 15:37:58.167000             🧑  作者: Mango
CSS 动画提供了创建各种动画效果的能力。本文将介绍如何使用 CSS 创建流星动画效果。
创建流星动画效果需要以下步骤:
以下是实现流星动画效果的代码:
.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;
}
}
控制流星的动画分为三部分:
该动画使用 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 代码,就可以在页面上创建一个令人惊艳的效果。