css实现流星划过动画

news2025/7/16 0:37:19

背景

👏渐变+伪元素实现流星,translateY实现划过动画,速速来Get吧~
🥇文末分享源代码。记得点赞+关注+收藏!

1.实现效果

在这里插入图片描述

2.实现原理

translateY():
translateY() 在页面垂直移动元素。
translateY(ty) 对应 translate(0, ty) 或translate3d(0, ty, 0)。

rotate():
rotate() 函数定义了一种将元素围绕一个定点(由transform-origin属性指定)旋转而不变形的转换。指定的角度定义了旋转的量度。若角度为正,则顺时针方向旋转,否则逆时针方向旋转。旋转 180° 也被称为点反射。

在这里插入图片描述

background-position:
CSS 属性为每一个背景图片设置初始位置。这个位置是相对于由 background-origin 定义的位置图层的。

在这里插入图片描述

3.实现步骤

3.1 实现一个流星

  • linear-gradient渐变实现尾迹,由下到上进行渐变,可以得到如下的矩形
width: 5px;
height: 85px;
background: linear-gradient(0deg, orange 0, red 100%);

在这里插入图片描述

  • 试着将红色改为透明底色,可以得到如下的矩形
background: linear-gradient(0deg, orange 0, transparent 100%);

在这里插入图片描述

  • 在此标签上添加伪元素,实现流星的头部
content: "";
position: absolute;
width: 14px;
height: 14px;
border-radius: 50%;
background: orange;
filter: blur(1.8px);
bottom: -6px;
left: 50%;
transform: translate(-50%);

在这里插入图片描述

  • rotate旋转45deg
transform: rotate(45deg);

在这里插入图片描述

3.2 实现多个流星

!!!注意:以下代码基于vue

  • 页面存在多个流星,位置不同 ,颜色不同,可定义一个流星列表,属性包括颜色,位置,以及动画延迟delay时间等,通过css的var变量实现样式的绑定。
  • 列表如下:c1和c2表示渐变的两个色值,l表示left距离,r表示right距离,d表示动画延迟时间
lineList: [
 {
     c1: "#69E4F6",
     c2: "#69e4f600",
     l: "0px",
     d: 3,
   },
   {
     c1: "#FED258",
     c2: "rgba(254,210,88,0)",
     l: "60px",
     d: 5,
   },
   {
     c1: "#FED258",
     c2: "rgba(254,210,88,0)",
     r: "72px",
     d: 2,
   },
   {
     c1: "#69E4F6",
     c2: "#69e4f600",
     r: "30px",
     d: 0,
   },
   {
     c1: "#69E4F6",
     c2: "#69e4f600",
     r: "41px",
     d: 1,
   },
   {
     c1: "#69E4F6",
     c2: "#69e4f600",
     l: "105px",
     d: 4,
   },
   {
     c1: "#FED258",
     c2: "rgba(254,210,88,0)",
     l: "30px",
     d: 2,
   },
   {
     c1: "#FED258",
     c2: "rgba(254,210,88,0)",
     r: "111px",
     d: 5,
   },
   {
     c1: "#69E4F6",
     c2: "#69e4f600",
     r: "2px",
     d: 3,
   },
 ],
  • 在行内样式中,写入参数
 <div class="line-box">
   <span
      class="line-item"
      v-for="(item,index) in lineList"
      :key="index"
      :style="{
              '--c1':item.c1,
              '--c2':item.c2,
              '--l':item.l,
              '--d':item.d,
              '--r':item.r
          }"
    ></span>
  </div>
  • 线条的样式对应到var定义的变量上
.line-item {
  width: 2px;
  height: 33px;
  background: linear-gradient(0deg, var(--c1) 0%, var(--c2) 100%);
  position: absolute;
  top: 0;
  transform: rotate(45deg);
  left: var(--l);
  right: var(--r);
}

.line-item::after {
  content: "";
  position: absolute;
  width: 7px;
  height: 7px;
  border-radius: 50%;
  background: var(--c1);
  filter: blur(1.8px);
  box-shadow: 0px -1px -1px 5px var(--c2);
  bottom: -4px;
  left: 50%;
  transform: translate(-50%);
}
  • 按照上述内容,实现的效果如下

在这里插入图片描述

3.3 添加划过动画

  • 所有流星默认透明度为0,不展示,若不设置为0,动画带来的延迟将会直接显示该线条,非常突兀
.line-item{
	+ opacity: 0;
}
  • 手动设置translateY的大小,观察流星的位置变化
    在这里插入图片描述
  • 通过调试,写一个合适的动画(具体数值,需根据实际情况而定)
@keyframes shank {
  0% {
    transform: rotate(45deg) translateY(-100px) scale(0.5);
    opacity: 0;
  }

  70% {
    opacity: 1;
    transform: rotate(45deg) translateY(100px) scale(1.1);
  }

  100% {
    transform: rotate(45deg) translateY(220px) scale(0.5);
    opacity: 0;
  }
}
  • 给每个流星线条添加动画以及延迟,通过延迟使其有一定的视觉差
.line-item{
	+ animation: shank 2s linear infinite;
	+ animation-delay: calc(var(--d) * 0.2s);
}

在这里插入图片描述

  • 流星总体偏左,不够协调,可以改变其初始位置,(left或者right),或者直接在其位置上添加一定的偏移量,使其更加的和谐
.line-item{
	- left: var(--l);
    - right: var(--r);
	+ left: calc(var(--l) + 70px);
    + right: calc(var(--r) - 70px);
}

在这里插入图片描述

3.4 页面添加背景并设置动画

  • 添加背景
  • 给背景设置一个background-position的动画
.container::before {
   content: "";
   position: absolute;
   width: 100%;
   height: 100%;
   left: 0;
   top: 0;
   background: url(./img/earth.jpg) no-repeat;
   background-size: cover;
   animation: ping 4s infinite linear alternate-reverse;
 }
 @keyframes ping {
   100% {
     background-position: 100%;
   }
 }

4.实现代码

  • 样式代码
.container {
   box-shadow: 0px 2px 12px rgba(0, 0, 0, 0.2);
   border-radius: 20px;
   padding: 40px;
   position: relative;
   width: 350px;
   height: 260px;
   overflow: hidden;
 }
 .container::before {
   content: "";
   position: absolute;
   width: 100%;
   height: 100%;
   left: 0;
   top: 0;
   background: url(./img/earth.jpg) no-repeat;
   background-size: cover;
   animation: ping 4s infinite linear alternate-reverse;
 }
 @keyframes ping {
   100% {
     background-position: 100%;
   }
 }
 .line-box {
   width: 100%;
   height: 100%;
   position: relative;
 }

 .line-item {
   width: 2px;
   height: 33px;
   background: linear-gradient(0deg, var(--c1) 0%, var(--c2) 100%);
   position: absolute;
   top: 0;
   transform: rotate(45deg);
   left: calc(var(--l) + 70px);
   right: calc(var(--r) - 70px);
   opacity: 0;
   animation: shank 2s linear infinite;
   animation-delay: calc(var(--d) * 0.2s);
 }

 .line-item::after {
   content: "";
   position: absolute;
   width: 7px;
   height: 7px;
   border-radius: 50%;
   background: var(--c1);
   filter: blur(1.8px);
   box-shadow: 0px -1px -1px 5px var(--c2);
   bottom: -4px;
   left: 50%;
   transform: translate(-50%);
 }

 @keyframes shank {
   0% {
     transform: rotate(45deg) translateY(-100px) scale(0.5);
     opacity: 0;
   }

   70% {
     opacity: 1;
     transform: rotate(45deg) translateY(100px) scale(1.1);
   }

   100% {
     transform: rotate(45deg) translateY(220px) scale(0.5);
     opacity: 0;
   }
 }
  • 页面代码
<div class="container" >
	<div class="line-box">
	     <span
	       class="line-item"
	       v-for="(item,index) in lineList"
	       :key="index"
	       :style="{
	               '--c1':item.c1,
	               '--c2':item.c2,
	               '--w':item.w,
	               '--h':item.h,
	               '--l':item.l,
	               '--d':item.d,
	               '--r':item.r
	           }"
	     ></span>
   	</div>
 </div>
  • lineList代码如3.2章节所示

5.写在最后🍒

看完本文如果觉得对你有一丢丢帮助,记得点赞+关注+收藏鸭 🍕
更多相关内容,关注🍥苏苏的bug,🍡苏苏的github,🍪苏苏的码云~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/8366.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

上海亚商投顾:沪指重返3100点

上海亚商投顾前言&#xff1a;无惧大盘大跌&#xff0c;解密龙虎榜资金&#xff0c;跟踪一线游资和机构资金动向&#xff0c;识别短期热点和强势个股。 市场情绪三大指数今日低开高走&#xff0c;沪指重返3100点上方&#xff0c;深成指、创业板指午后均涨超2%。半导体板块掀涨停…

Java并发编程学习13-任务取消(下)

任务取消&#xff08;下&#xff09; 《任务取消》由于篇幅较多&#xff0c;拆分了两篇来介绍各种实现取消和中断的机制&#xff0c;以及如何编写任务和服务&#xff0c;使它们能对取消请求做出响应。 1. 任务限时运行 我们知道许多任务可能永远也无法处理完成&#xff08;…

[go学习笔记.第十四章.协程和管道] 3.协程配合管道案例以及管道的注意事项和使用细节

案例一 请完成goroutine和channel协同工作的案例&#xff0c;具体要求&#xff1a; (1).开启一个writeData协程&#xff0c;向管道intChan中写入50个整数. (2).开启一个readData协程&#xff0c;从管道intChan中读取writeData写入的数据 (3).注意&#xff1a; writeData和readD…

阿里内部目前最完整“Spring全线笔记”,不止是全家桶,太完整了

前言 对于每一位Java开发人员来说&#xff0c;提起Spring定是不陌生的&#xff0c;实际上自Spring框架诞生以来&#xff0c;就备受开发者的青睐&#xff0c;基本上现在的互联网公司都要使用到Spring框架。Spring框架中又包含了SpringMVC、SpringBoot、SpringCloud等&#xff0…

【前端】Vue+Element UI案例:通用后台管理系统-项目总结

文章目录相关链接前言效果登录页首页管理员的首页xiaoxiao的首页用户管理总结项目搭建左侧&#xff1a;CommonAside上侧&#xff1a;CommonHeader和CommonTag首页&#xff1a;Home.vue用户管理&#xff1a;User.vue登录页&#xff1a;Login.vue总代码相关链接 参考视频&#x…

Spark 3.0 - 1.Spark 新特性简介与 WordCount Demo 实践

目录 一.引言 二.Spark 3.0 特性 1.Improving the Spark SQL engine [改进的SQL引擎] 1.1 Dynamic Partition Pruning [动态分区修剪] 1.2 ANSI SQL compliant [兼容 ANSI SQL] 1.3 Join hints [连接提示] 2.Enhancing the Python APIs: PySpark and Koalas [增强Python…

推荐国产神器Eolink!API优先,Eolink领先!

前言&#xff1a; 在我们后端开发者做项目的时候&#xff0c;避免不了与前端界面的交互&#xff0c;对于我来讲&#xff0c;在做项目的时候用到过postman&#xff0c;swagger做接口测试工作&#xff0c;在公司的时候公司主要用YApi可视化接口平台&#xff0c;最近使用了一个爆款…

Express

目录 Express介绍 测试最基本的服务器 Express基本使用 托管静态资源 2. 挂载路径前缀 nodemon 路由 模块化路由 2.注册使用路由模块 中间件的概念 ​编辑1.next函数的作用 2.app.use(全局中间件) 4.连续多个中间件 5.局部生效中间件 中间件的分类 1.应用级别…

自动驾驶入门:感知

目录 概念 感知方法 CNN 检测与分类 跟踪 分割 Apollo感知 感知设备分类 概念 我们人类天生就配备多种传感器&#xff0c;眼睛可以看到周围的环境&#xff0c;耳朵可以用来听&#xff0c;鼻子可以用来嗅&#xff0c;也有触觉传感器&#xff0c;甚至还有内部传感器&…

Android 性能优化

你会学到什么&#xff1f; 深入底层&#xff0c;全面建立性能优化知识体系&#xff1b; 高手思路&#xff0c;掌握大厂性能调优方法论&#xff1b; 三大模块&#xff0c;实战内存速度包体积优化&#xff1b; 玩转“黑科技”&#xff0c;轻松实现性能优化进阶。 作者介绍 赵…

现货黄金基本知识:黄金策略五大心法

我们经常看电视剧或小说&#xff0c;都会看到一些老套的情景&#xff0c;例如当某个人物死的时候&#xff0c;会讲毕生所学&#xff0c;或者是功夫、或者是知识&#xff0c;传到某一个人的手中。在现货黄金市场&#xff0c;也有累积了历代交易高手的“武功心法”&#xff0c;虽…

Bergsoft NextSuite (VCL) 不同的方式提供数据

Bergsoft NextSuite (VCL) 不同的方式提供数据 BergSoft NextSuite是一家强大的Delphi和CBuilder。NextGrid是一台易于使用的计算机&#xff0c;可以在设计时和设计时理解方法和技能。NextGrid有不止一个StringGrid和ListView美味的标准。NextDBGrid是基于著名NextGrid计算机的…

深入浅出PyTorch——基础知识

一、PyTorch的简介和安装 因为在学习pytorch之前就已经配置和安装好了相关的环境和软件&#xff0c;所以这里就不对第一章进行详细的总结&#xff0c;就简要总结一下&#xff1a; 1.1 pytorch的发展 去了Paper with code网站查看了现在pytorch的使用&#xff0c;远超tensor…

【机器学习】线性分类【下】经典线性分类算法

主要参考了B站UP主“shuhuai008”&#xff0c;包含自己的理解。 有任何的书写错误、排版错误、概念错误等&#xff0c;希望大家包含指正。 由于字数限制&#xff0c;分成两篇博客。 【机器学习】线性分类【上】广义线性模型 【机器学习】线性分类【下】经典线性分类算法 3. 线…

Spring知识点补充

1.常见的ORM框架都有哪些呢&#xff1f; 什么是ORM框架&#xff1f; 所谓的ORM框架&#xff0c;就是对象关系映射框架&#xff0c;就是让我们程序中的类里面的属性直接映射到我的数据库中的表里面的列&#xff0c;我们在Java中操作这个类的时候&#xff0c;就相当于直接操作数据…

Python避坑指南(续)

在上一篇《Python避坑指南》中&#xff0c;我重点给大家讲了Python可变容器数据类型中的坑。除了这些&#xff0c;Python还有其他一些细小方面的坑&#xff0c;本章为大家讲解Python中这些大家可能会忽视的细节。 文章目录链式or的坑访问字面量属性的坑is的坑GIL全局锁的坑多数…

建模杂谈系列177 APIFunc继续实践-比对研究

说明 在最终的实用上,我还是选择了Kettle。主要还是因为考虑未来公司的部署和使用上有比较全的文档,也比较有说服力。所以有时候也挺有趣的: 1 其实APIFunc要好得多,但是(刚做完原型验证)并不能取得大部分人的信任2 有一些方法对于有一定基础的人来说很方便,但是对于更…

剑指offer试题整理1

1、定义一个空的类型&#xff0c;里面没有任何成员变量和成员函数。对该类型求sizeof&#xff0c;得到的结果是什么&#xff1f; 答案&#xff1a;1. 为什么不是0? 空类型的示例中不包含任何信息&#xff0c;本来求siezof应该是0&#xff0c;但是当我们声明改类型的实列是时…

Zookeeper的数据模型和节点类型

数据模型&#xff1a; 树形结构 zk维护的数据主要有&#xff1a;客户端的会话&#xff08;session&#xff09;状态及数据节点&#xff08;dataNode&#xff09;信息。 zk在内存中构造了个DataTree的数据结构&#xff0c;维护着path到dataNode的映射以及dataNode间的树状层级关…

asp.net+sqlserver团购网站c#

数据需求分析 该网站的主要功能主要体现在对各种信息的添加、修改、删除和查询的操作上&#xff0c;包括会员信息、公司管理信息、订单信息、产品信息、团购管理信息等&#xff0c;各部分的信息之间又有着内在联系&#xff0c;因此总结出如下需求&#xff1a; &#xff08;1&am…