未加星标

通过CSS的滤镜实现火焰效果的示例

字体大小 | |
[前端(html5) 所属分类 前端(html5) | 发布者 店小二05 | 时间 | 作者 红领巾 ] 0人收藏点击收藏

上次我们了解了一些css滤镜的基础知识,CSS滤镜 filter属性

这次我们就来用css的滤镜实现一个 火焰的效果。

解释

通过CSS的滤镜实现火焰效果的示例

要实现上面的火焰效果,我们先来了解一些必要的东西。

上次我们说过两个滤镜,blur 和 contrast。

blur 是给图像设置高斯模糊, contrast 是调整图像的对比度, 他们一起使用会产生融合的效果。

效果图

通过CSS的滤镜实现火焰效果的示例

图中 红色背景 设置了 filter:contrast(20); 这点很重要,两个圆设置了 filter:blur(10px); 如果还不清楚,我们对比看看。

通过CSS的滤镜实现火焰效果的示例
通过CSS的滤镜实现火焰效果的示例

好的知道这些,我们开始实现火焰效果吧。

大致需要这 3 步:

1、先用边框画出三角形

要知道,如果 width是0,height也是0,只用边框的话,边框是三角形的,我们看看 width 和 height 都是0的,但边框宽度是100px的元素的样子

通过CSS的滤镜实现火焰效果的示例

上图,4边的边框颜色是不一样的,我们很清楚的看见了4个三角形,我们现在需要下面这样一个东西,相信大家知道怎么实现了。

通过CSS的滤镜实现火焰效果的示例

2、调整三角形的大小与颜色,实现类似火焰的样子

这一步很简单,我们只需要在上面已经实现的三角形上加这三行代码

border-radius: 45%;
transform: scaleX(.4);
filter: blur(20px) contrast(30);

效果图

通过CSS的滤镜实现火焰效果的示例

3、让火焰动起来

这一步算是比较麻烦的了,不过也很好理解,就是利用上面提到的融合效果,让许多小圆随机的穿过这个三角形就可以了,看看下面这张图,就能理解原理。

通过CSS的滤镜实现火焰效果的示例

好的,理解这些看代码绝对很容易了。

完成代码

<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<style>
body {
background: #000;
}
.container {
position: relative;
width: 300px;
height: 300px;
margin: 0 auto;
background-color: #000;
}
.fire {
position: absolute;
bottom: 0;
left: 50%;
border-radius: 45%;
box-sizing: border-box;
border: 200px solid #000;
border-bottom: 200px solid #b5932f;
transform: translate(-50%, 0) scaleX(.4);
filter: blur(20px) contrast(30);
}

/* 小圆的样式 */
.dot {
position: absolute;
bottom: -110px;
left: 0;
width: 24px;
height: 24px;
background: #000;
border-radius: 50%;
}
@keyframes move {
100% {transform: translateY(-350px);
}
}
</style>
</head>
<body>
<div class="container">
<div class="fire">
</div>
</div>
<script>
//创建一个元素,放所有的小圆
var circleBox = document.createElement('div');
//获取随机数 from 参数表示从哪个数开始 to参数表示到哪个数结束 from<= num <= to
function randomNum(from, to) {
from = Number(from);
to = Number(to);
var Range = to - from;
var num = from + Math.round(Math.random() * Range); //四舍五入
return num;
};

for (var i = 0; i < 40; i++) {
//创建小圆
var circle = document.createElement('div');
// 下面的4个变量 代表小圆随机位置 和 随机持续时间和延迟
var bottom = randomNum(-300, -250);
var left = randomNum(-200, 200);
var duration = randomNum(10, 30) / 10;
var delay = randomNum(0, 50) / 10;
//给生成的每个小圆 加上动画和位置属性
circle.style.cssText += `animation:move ${duration}s linear ${delay}s infinite;bottom:${bottom}px;left:${left}px;`;
circle.className += " dot";
//把每个小圆 都加入这个div
circleBox.appendChild(circle);
};

var fire = document.querySelector(".fire");
//把有40个随机小圆的 div 加入DOM树
fire.appendChild(circleBox);
</script>
</body>
</html>

总结

这次,说的火焰效果就结束了,css的滤镜当然还能实现其他更有趣的效果,那就等大家自己去探索了。

主题: CSS探索UT变量
代码区博客精选文章
分页:12
转载请注明
本文标题:通过CSS的滤镜实现火焰效果的示例
本站链接:https://www.codesec.net/view/568097.html


1.凡CodeSecTeam转载的文章,均出自其它媒体或其他官网介绍,目的在于传递更多的信息,并不代表本站赞同其观点和其真实性负责;
2.转载的文章仅代表原创作者观点,与本站无关。其原创性以及文中陈述文字和内容未经本站证实,本站对该文以及其中全部或者部分内容、文字的真实性、完整性、及时性,不作出任何保证或承若;
3.如本站转载稿涉及版权等问题,请作者及时联系本站,我们会及时处理。
登录后可拥有收藏文章、关注作者等权限...
技术大类 技术大类 | 前端(html5) | 评论(0) | 阅读(469)