当前位置:Gxlcms > css > CSS滤镜实现火焰效果实例讲解

CSS滤镜实现火焰效果实例讲解

时间:2021-07-01 10:21:17 帮助过:13人阅读

上次我们了解了一些css滤镜的基础知识,CSS滤镜 filter属性,本文主要介绍了通过CSS的滤镜实现火焰效果的示例,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧,希望能帮助到大家。

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

解释

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

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

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

效果图

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

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

大致需要这 3 步:

1、先用边框画出三角形

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

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

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

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


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

效果图

3、让火焰动起来

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

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

完成代码


  1. <!doctype html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <style>
  6. body {
  7. background: #000;
  8. }
  9. .container {
  10. position: relative;
  11. width: 300px;
  12. height: 300px;
  13. margin: 0 auto;
  14. background-color: #000;
  15. }
  16. .fire {
  17. position: absolute;
  18. bottom: 0;
  19. left: 50%;
  20. border-radius: 45%;
  21. box-sizing: border-box;
  22. border: 200px solid #000;
  23. border-bottom: 200px solid #b5932f;
  24. transform: translate(-50%, 0) scaleX(.4);
  25. filter: blur(20px) contrast(30);
  26. }
  27. /* 小圆的样式 */
  28. .dot {
  29. position: absolute;
  30. bottom: -110px;
  31. left: 0;
  32. width: 24px;
  33. height: 24px;
  34. background: #000;
  35. border-radius: 50%;
  36. }
  37. @keyframes move {
  38. 100% {
  39. transform: translateY(-350px);
  40. }
  41. }
  42. </style>
  43. </head>
  44. <body>
  45. <p class="container">
  46. <p class="fire">
  47. </p>
  48. </p>
  49. <script>
  50. //创建一个元素,放所有的小圆
  51. var circleBox = document.createElement('p');
  52. //获取随机数 from 参数表示从哪个数开始 to参数表示到哪个数结束 from<= num <= to
  53. function randomNum(from, to) {
  54. from = Number(from);
  55. to = Number(to);
  56. var Range = to - from;
  57. var num = from + Math.round(Math.random() * Range); //四舍五入
  58. return num;
  59. };
  60. for (var i = 0; i < 40; i++) {
  61. //创建小圆
  62. var circle = document.createElement('p');
  63. // 下面的4个变量 代表小圆随机位置 和 随机持续时间和延迟
  64. var bottom = randomNum(-300, -250);
  65. var left = randomNum(-200, 200);
  66. var duration = randomNum(10, 30) / 10;
  67. var delay = randomNum(0, 50) / 10;
  68. //给生成的每个小圆 加上动画和位置属性
  69. circle.style.cssText += `animation:move ${duration}s linear ${delay}s infinite;bottom:${bottom}px;left:${left}px;`;
  70. circle.className += " dot";
  71. //把每个小圆 都加入这个p
  72. circleBox.appendChild(circle);
  73. };
  74. var fire = document.querySelector(".fire");
  75. //把有40个随机小圆的 p 加入DOM树
  76. fire.appendChild(circleBox);
  77. </script>
  78. </body>
  79. </html>

相关推荐:

详解CSS3的filter滤镜属性

CSS3实现滤镜效果的实例详解

HTML5实现一个图片滤镜效果的示例代码分享


以上就是CSS滤镜实现火焰效果实例讲解的详细内容,更多请关注Gxl网其它相关文章!

人气教程排行