清风细雨楼 Design By www.eepep.com

上次我们了解了一些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的滤镜当然还能实现其他更有趣的效果,那就等大家自己去探索了。

清风细雨楼 Design By www.eepep.com
广告合作:本站广告合作请联系QQ:858582 申请时备注:广告合作(否则不回)
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
清风细雨楼 Design By www.eepep.com

P70系列延期,华为新旗舰将在下月发布

3月20日消息,近期博主@数码闲聊站 透露,原定三月份发布的华为新旗舰P70系列延期发布,预计4月份上市。

而博主@定焦数码 爆料,华为的P70系列在定位上已经超过了Mate60,成为了重要的旗舰系列之一。它肩负着重返影像领域顶尖的使命。那么这次P70会带来哪些令人惊艳的创新呢?

根据目前爆料的消息来看,华为P70系列将推出三个版本,其中P70和P70 Pro采用了三角形的摄像头模组设计,而P70 Art则采用了与上一代P60 Art相似的不规则形状设计。这样的外观是否好看见仁见智,但辨识度绝对拉满。