纯css实现粒子效果
前端开发whqet,csdn,王海庆,whqet,前端开发专家
好久没有更新的CSS3演武场系列,半年前搁浅的一篇文章赋予新年新气象闪亮登场了,研究一下利用css(sass)实现粒子效果,主要使用box-shadow生成粒子,利用css3 animation和translateZ实现动画。
------------------------------------------------------------
--我参加了博客之星评选,如果你喜欢我的博客,求投票,您的支持是我的动力之源,走起!
-----------------------------------------------------------------------------------------
看效果先
思路解析
1.box-shadow生成粒子,赋予随机位置、随机颜色,利用sass的for循环和random()实现。
2.animation实现动画。
3.transform 3d实现深度动画,主要使用translateZ。
实现
下面我们分别来实现一下,源码我放在了codepen,请大家移步。
----------------
----------------------------------------
在线研究点击这里,下载收藏点击这里。
----------------------------------------
---------------
1.html部分非常简单就是一个div。
<div class="stars"></div>
2.css部分是重点,我们首先设置全局的css,我们使用normallize和prefix free。然后对html和body作如下设置。
$stars: 100; // 粒子数
$depth: 300; // 深度
$speed: 1s; // 动画时间
$width: 1500; // 宽
$height: 960; // 高html, body {height: 100%;overflow: hidden;
}
body {perspective: 340px;background:#000 url(https://img-my.csdn.net/uploads/201501/02/1420174857_3649.png) center center no-repeat;background-size:28% 30%;
}
对于.stars,我们设置大小、位置,宽、高各位5px,位置居中,圆角边框。
.stars {position: absolute;top: 50%;left: 50%;width:5px;height:5px;border-radius:100%;
}
然后我们使用box-shadow生成粒子。box-shadow一个很好玩的特性,生成效果如下。
.stars {position: absolute;top: 50%;left: 50%;width:5px;height:5px;border-radius:100%;/*box-shadow生成粒子*/$box-shadow: ();@for $i from 0 through $stars {$box-shadow: $box-shadow, (random($width)-$width/2 + px) (random($height)-$height/2 + px) adjust-hue(#ff0000, random(360));}box-shadow: $box-shadow;
}
然后这个数量有点少,同时层次感不足,我们利用:before和:after伪对象搞定这些事情。
.stars {position: absolute;top: 50%;left: 50%;width:5px;height:5px;border-radius:100%;$box-shadow: ();@for $i from 0 through $stars {$box-shadow: $box-shadow, (random($width)-$width/2 + px) (random($height)-$height/2 + px) adjust-hue(#ff0000, random(360));}box-shadow: $box-shadow;/*伪对象更多粒子、更多层次*/&:before, &:after {content: "";position: absolute;width: inherit;height: inherit;box-shadow: inherit;}&:before {transform: translateZ(-$depth + px);opacity: .3;}&:after {transform: translateZ(-$depth * 2 + px);opacity: .1;}
}
添加粒子和深度之后效果如下图所示。
然后添加动画。
.stars {position: absolute;top: 50%;left: 50%;width:5px;height:5px;border-radius:100%;/*box-shadow生成粒子*/$box-shadow: ();@for $i from 0 through $stars {$box-shadow: $box-shadow, (random($width)-$width/2 + px) (random($height)-$height/2 + px) adjust-hue(#ff0000, random(360));}box-shadow: $box-shadow;/* 添加动画 */animation: fly $speed linear infinite;transform-style:preserve-3d;/* 伪对象更多粒子、更多层次 */&:before, &:after {content: "";position: absolute;width: inherit;height: inherit;box-shadow: inherit;}&:before {transform: translateZ(-$depth + px);opacity: .3;}&:after {transform: translateZ(-$depth * 2 + px);opacity: .1;}
}@keyframes fly {from {transform: translateZ(0px);opacity:.1;}to {transform: translateZ($depth + px);opacity:0.8;}
}
然后,就可以欣赏效果了。最后给大家附带完整的css源码。
$stars: 100; // 粒子数
$depth: 300; // 深度
$speed: 1s; // 动画时间
$width: 1500; // 宽
$height: 960; // 高html, body {height: 100%;overflow: hidden;
}
body {perspective: 340px;background:#000 url(https://img-my.csdn.net/uploads/201501/02/1420174857_3649.png) center center no-repeat;background-size:28% 30%;
}
.stars {position: absolute;top: 50%;left: 50%;width:5px;height:5px;border-radius:100%;$box-shadow: ();@for $i from 0 through $stars {$box-shadow: $box-shadow, (random($width)-$width/2 + px) (random($height)-$height/2 + px) adjust-hue(#ff0000, random(360));}box-shadow: $box-shadow;/* animation: fly $speed linear infinite;transform-style:preserve-3d;*/&:before, &:after {content: "";position: absolute;width: inherit;height: inherit;box-shadow: inherit;}&:before {transform: translateZ(-$depth + px);opacity: .3;}&:after {transform: translateZ(-$depth * 2 + px);opacity: .1;}
}@keyframes fly {from {transform: translateZ(0px);opacity:.1;}to {transform: translateZ($depth + px);opacity:0.8;}
}
感谢您耐心读完,如果对您有帮助,请支持我!
----------------------------------------------------------
前端开发whqet,关注web前端开发,分享相关资源,欢迎点赞,欢迎拍砖。
---------------------------------------------------------------------------------------------------------
纯css实现粒子效果相关推荐
- 纯 CSS 实现波浪效果!
一直以来,使用纯 CSS 实现波浪效果都是十分困难的. 因为实现波浪的曲线需要借助贝塞尔曲线. 而使用纯 CSS 的方式,实现贝塞尔曲线,额,暂时是没有很好的方法. 当然,借助其他力量(SVG.CAN ...
- 制作css开关,纯css实现开关效果
大家好,我又来了,这次给大家表演使用纯css实现开关效果 首先是构思 我们使用标签来实现这个效果. checkbox的选中.未选中的特性,刚好对应开关的打开.关闭 on:打开 off:关闭 未选中,则 ...
- html实现开关,使用纯css实现开关效果
首先是构思 我们使用标签来实现这个效果. checkbox的选中.未选中的特性,刚好对应开关的打开.关闭 on:打开 off:关闭 未选中,则关闭开关 选中,则打开开关 开始画出off.on状态的草图 ...
- 如何用纯 CSS 实现优惠券效果
背景 本文来自CODE.FUN ,讲述如何用纯 CSS 实现优惠券效果的实践案例,分享给大家. 优惠券视觉效果 上面是优惠券的视觉效果,本文分享如何使用纯 CSS 实现它的主要框架,希望对大家有 ...
- 纯CSS实现弹幕效果
纯CSS实现弹幕效果 动画相关的属性和方法已经本部分的开头简单提过了,我们来看一下本次要实现的效果--弹幕- 当你在阅读.看视频的时候经常会遇见一段文件或者一张表情从页面划过,要实现一个完整的功能很复 ...
- Php开源h5相册系统,HTML5 CSS3专题 纯CSS打造相册效果的示例代码详解
HTML5 CSS3专题 纯CSS打造相册效果的示例代码详解: 今天偶然发现电脑里面还有这样的一个例子,感觉效果还不错,不记得啥时候下载的了,也好久没上w3cfuns了,怀念学习前台的日子,给大家分享 ...
- css中间镂空,怎么用纯CSS实现镂空效果
怎么用纯CSS实现镂空效果 发布时间:2021-03-19 09:49:16 来源:亿速云 阅读:99 作者:小新 小编给大家分享一下怎么用纯CSS实现镂空效果,希望大家阅读完这篇文章之后都有所收获, ...
- 纯css实现信封效果
纯css实现信封效果 <body><div id="dialog"><div id="envelope"><div i ...
- HTML中 css红绿黄灯,纯CSS实现红绿灯效果(面试常见)
先看题,别看答案试下吧 ~_~ 1.下面的代码输出的内容是什么? function O(name){ this.name=name||'world'; } O.prototype.hello=func ...
最新文章
- 双系统重装windows后如何恢复ubuntu启动项
- 转载:程序员从初级到中级10个秘诀
- 条件信息熵的决策表约简
- php基础知识填空题,比较基础的php面试题及答案填空题
- 【Java 强化】单元测试(JUnit3、JUnit4)、XML(语法、约束、文档结构)、DOM、DOM4J
- 2021重庆对口高职高考成绩查询,重庆市2021年高职分类考试成绩明日放榜
- 牛客网Java刷题知识点之表达式类型的自动提升
- from表单requried属性效果
- 百度移动开放平台认领应用--apk 空包签名
- java socket 发对象_Java Socket 发送对象
- word文档解除编辑受限(忘记密码)
- 关于个人网站的盈利模式,可能你还不知道?
- linux jq下载文件,linux 之 jq
- codeforces 868C - Qualification Rounds
- jadx卡死解决方案
- 男人很容易喜欢一个女人,却不轻易深爱一个女人。
- 2019,推荐几个牛逼大佬的公号
- 指针和地址之间的关系是什么?
- Spark教程——(10)Spark SQL读取Phoenix数据本地执行计算
- python怎么导入数据集keras_keras使用Sequence类调用大规模数据集进行训练的实现