通過CSS的濾鏡實(shí)現(xiàn)火焰效果的示例
上次我們了解了一些css濾鏡的基礎(chǔ)知識(shí),CSS濾鏡 filter屬性
這次我們就來用css的濾鏡實(shí)現(xiàn)一個(gè) 火焰的效果。
解釋

要實(shí)現(xiàn)上面的火焰效果,我們先來了解一些必要的東西。
上次我們說過兩個(gè)濾鏡,blur 和 contrast。
blur 是給圖像設(shè)置高斯模糊, contrast 是調(diào)整圖像的對(duì)比度, 他們一起使用會(huì)產(chǎn)生融合的效果。
效果圖

圖中 紅色背景 設(shè)置了 filter:contrast(20); 這點(diǎn)很重要,兩個(gè)圓設(shè)置了 filter:blur(10px); 如果還不清楚,我們對(duì)比看看。


好的知道這些,我們開始實(shí)現(xiàn)火焰效果吧。
大致需要這 3 步:
1、先用邊框畫出三角形
要知道,如果 width是0,height也是0,只用邊框的話,邊框是三角形的,我們看看 width 和 height 都是0的,但邊框?qū)挾仁?00px的元素的樣子

上圖,4邊的邊框顏色是不一樣的,我們很清楚的看見了4個(gè)三角形,我們現(xiàn)在需要下面這樣一個(gè)東西,相信大家知道怎么實(shí)現(xiàn)了。

2、調(diào)整三角形的大小與顏色,實(shí)現(xiàn)類似火焰的樣子
這一步很簡單,我們只需要在上面已經(jīng)實(shí)現(xiàn)的三角形上加這三行代碼
border-radius: 45%; transform: scaleX(.4); filter: blur(20px) contrast(30);
效果圖

3、讓火焰動(dòng)起來
這一步算是比較麻煩的了,不過也很好理解,就是利用上面提到的融合效果,讓許多小圓隨機(jī)的穿過這個(gè)三角形就可以了,看看下面這張圖,就能理解原理。

好的,理解這些看代碼絕對(duì)很容易了。
完成代碼
<!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>
//創(chuàng)建一個(gè)元素,放所有的小圓
var circleBox = document.createElement('div');
//獲取隨機(jī)數(shù) from 參數(shù)表示從哪個(gè)數(shù)開始 to參數(shù)表示到哪個(gè)數(shù)結(jié)束 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++) {
//創(chuàng)建小圓
var circle = document.createElement('div');
// 下面的4個(gè)變量 代表小圓隨機(jī)位置 和 隨機(jī)持續(xù)時(shí)間和延遲
var bottom = randomNum(-300, -250);
var left = randomNum(-200, 200);
var duration = randomNum(10, 30) / 10;
var delay = randomNum(0, 50) / 10;
//給生成的每個(gè)小圓 加上動(dòng)畫和位置屬性
circle.style.cssText += `animation:move ${duration}s linear ${delay}s infinite;bottom:${bottom}px;left:${left}px;`;
circle.className += " dot";
//把每個(gè)小圓 都加入這個(gè)div
circleBox.appendChild(circle);
};
var fire = document.querySelector(".fire");
//把有40個(gè)隨機(jī)小圓的 div 加入DOM樹
fire.appendChild(circleBox);
</script>
</body>
</html>
總結(jié)
這次,說的火焰效果就結(jié)束了,css的濾鏡當(dāng)然還能實(shí)現(xiàn)其他更有趣的效果,那就等大家自己去探索了。
相關(guān)文章
這篇文章主要介紹了CSS3 實(shí)現(xiàn)的火焰動(dòng)畫的示例代碼,幫助大家更好的理解和使用CSS3制作特效,感興趣的朋友可以了解下2020-12-07
CSS3實(shí)現(xiàn)文字浮雕效果,鏤刻效果,火焰文字
這篇文章主要介紹了CSS3實(shí)現(xiàn)文字浮雕效果,鏤刻效果,火焰文字,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編2020-02-27
這篇文章主要介紹了如何通過 CSS 寫出火焰效果,本文通過實(shí)例圖文相結(jié)合給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-03-04



