CSS3-流星雨

1. 绘制标签

html 复制代码
<div class="container">
	<span></span>
</div>

2. 设置div背景

在百度上搜索一幅星空的图片

html 复制代码
<style>
	* {
		/* 初始化 */
		margin: 0;
		padding: 0;
	}

	body {
		/* 高度100% */
		height: 100vh;
		/* 溢出隐藏 */
		overflow: hidden;
	}

	.container {
		background: url(xk1.jpg) no-repeat;
		width: 100%;
		height: 100%;
		position: absolute;
		/* 把背景图像扩展到足够大,使背景图像覆盖背景区域 */
		background-size: cover;
		/* 背景图像设置为正中间 */
		background-position: center;
	}
</style>

3. 绘制流星和尾巴

html 复制代码
span {
	width: 10px;
	height: 10px;
	background-color: #fff;
	position: absolute;
	left: 50%;
	top: 50%;
	/* 圆角 */
	border-radius: 50%;
	/* 发光效果 
	0 x轴方向的长度
	0 y轴方向的长度
	10 阴影模糊度,只能为正数
	4  阴影的扩散半径				
	*/
	box-shadow: 0px 0 10px 4px rgba(255, 255, 255, 1);

}


span::before {
	content: "";
	width: 300px;
	height: 3px;
	/* 渐变背景 90度,由#fff 向完全透明渐变 */
	background: linear-gradient(90deg, #fff, transparent);
	position: absolute;
	top: 50%;
}

4. 添加背景缩放的动画

html 复制代码
/* 定义动画 ,背景缩放*/
@keyframes animateBg {

	0%,
	100% {
		transform: scale(1);
	}

	50% {
		transform: scale(1.2);
	}
}

添加动画到 .container 的样式中

5. 流星动画

html 复制代码
@keyframes animateLx {
	0% {
		/* 角度旋转315度,x方向移动0px */
		transform: rotate(315deg) translateX(0);
		opacity: 1;
	}

	90% {
		opacity: 1;
	}

	100% {
		/* 角度旋转315度,x方向移动-1000px 向左边移动 */
		transform: rotate(315deg) translateX(-1000px);
		opacity: 0;
	}
}

添加动画到span标签上

6. 为第一个span单独设置动画出现的位置,和动画效果

html 复制代码
span:nth-child(1) {
	top: 0px;
	left: initial;
	right: 0px;
	/* 动画延迟时间 */
	animation-delay: 0s;
	/* 动画时长 */
	animation-duration: 1s;
}

7. 为第二个span单独设置动画出现的位置,和动画效果

html 复制代码
span:nth-child(2) {
	top: 0px;
	right: 80px;
	left: initial;
	animation-delay: 0.1s;
	animation-duration: 3s;
}

8. 后续

每添加一个标记,就添加一个对应的样式,通过改变top ,right ,动画延时,动画时长等参数,生成不同的流星

9. 完整代码

html 复制代码
<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>流星雨划过天际的动画</title>
		<style>
			* {
				/* 初始化 */
				margin: 0;
				padding: 0;
			}

			body {
				/* 高度100% */
				height: 100vh;
				/* 溢出隐藏 */
				overflow: hidden;
			}

			.container {
				background: url(xk1.jpg) no-repeat;
				width: 100%;
				height: 100%;
				position: absolute;
				/* 把背景图像扩展到足够大,使背景图像覆盖背景区域 */
				background-size: cover;
				/* 背景图像设置为正中间 */
				background-position: center;

				/* 执行动画,时长,线性的,无限次数播放 */
				animation: animateBg 5s linear infinite;
			}

			span {
				width: 10px;
				height: 10px;
				background-color: #fff;
				position: absolute;
				left: 50%;
				top: 50%;
				/* 圆角 */
				border-radius: 50%;
				/* 发光效果 
				0 x轴方向的长度
				0 y轴方向的长度
				10 阴影模糊度,只能为正数
				4  阴影的扩散半径				
				*/
				box-shadow: 0px 0 10px 4px rgba(255, 255, 255, 1);
				animation: animateLx 3s linear infinite;

			}


			span::before {
				content: "";
				width: 300px;
				height: 3px;
				/* 渐变背景 90度,由#fff 向完全透明渐变 */
				background: linear-gradient(90deg, #fff, transparent);
				position: absolute;
				top: 50%;
			}

			/* 定义动画 ,背景缩放*/
			@keyframes animateBg {

				0%,
				100% {
					transform: scale(1);
				}

				50% {
					transform: scale(1.2);
				}
			}

			@keyframes animateLx {
				0% {
					transform: rotate(315deg) translateX(0);
					opacity: 1;
				}

				90% {
					opacity: 1;
				}

				100% {
					transform: rotate(315deg) translateX(-1000px);
					opacity: 0;
				}
			}

			span:nth-child(1) {
				top: 0px;
				right: 0px;
				left: initial;
				/* 动画延迟时间 */
				animation-delay: 0s;
				/* 动画时长 */
				animation-duration: 1s;
			}

			span:nth-child(2) {
				top: 0px;
				right: 80px;
				left: initial;
				animation-delay: 0.1s;
				animation-duration: 3s;
			}

			span:nth-child(3) {
				top: 80px;
				right: 0px;
				left: initial;
				animation-delay: 0.4s;
				animation-duration: 2s;
			}

			span:nth-child(4) {
				top: 0px;
				right: 10px;
				left: initial;
				animation-delay: 0.7s;
				animation-duration: 2s;
			}

			span:nth-child(5) {
				top: 0px;
				right: 400px;
				left: initial;
				animation-delay: 0.8s;
				animation-duration: 2.5s;
			}

			span:nth-child(6) {
				top: 0px;
				right: 600px;
				left: initial;
				animation-delay: 1s;
				animation-duration: 3s;
			}

			span:nth-child(7) {
				top: 300px;
				right: 0px;
				left: initial;
				animation-delay: 1.2s;
				animation-duration: 1.75s;
			}

			span:nth-child(8) {
				top: 0px;
				right: 700px;
				left: initial;
				animation-delay: 1.4s;
				animation-duration: 1.25s;
			}

			span:nth-child(9) {
				top: 0px;
				right: 1000px;
				left: initial;
				animation-delay: 0.75s;
				animation-duration: 2.25s;
			}

			span:nth-child(10) {
				top: 0px;
				right: 450px;
				left: initial;
				animation-delay: 2.75s;
				animation-duration: 2.25s;
			}
		</style>
	</head>
	<body>
		<div class="container">
			<!--10个span-->
			<span></span>
			<span></span>
			<span></span>
			<span></span>
			<span></span>
			<span></span>
			<span></span>
			<span></span>
			<span></span>
			<span></span>
		</div>
	</body>
</html>
相关推荐
前端工作日常9 分钟前
我学习到的AG-UI的概念
前端
韩师傅14 分钟前
前端开发消亡史:AI也无法掩盖没有设计创造力的真相
前端·人工智能·后端
XiaoYu200228 分钟前
第12章 支付宝SDK
前端
双向331 小时前
RAG的下一站:检索增强生成如何重塑企业知识中枢?
前端
拖拉斯旋风1 小时前
从零开始:使用 Ollama 在本地部署开源大模型并集成到 React 应用
前端·javascript·ollama
asing1 小时前
🤯 为什么我的收银台在鸿蒙系统“第一次返回”死活拦不住?一次差点背锅的排查实录
前端·harmonyos
德育处主任1 小时前
『NAS』在群晖部署图片压缩工具-Squoosh
前端·javascript·docker
Hao_Harrision1 小时前
50天50个小项目 (React19 + Tailwindcss V4) ✨| ThreeDBackgroundBoxes(3D背景盒子组件)
前端·3d·typescript·react·tailwindcss·vite7
加个鸡腿儿1 小时前
经验分享2:SSR 项目中响应式组件的闪动陷阱与修复实践
前端·css·架构
心.c1 小时前
如何基于 RAG 技术,搭建一个专属的智能 Agent 平台
开发语言·前端·vue.js