掃二維碼與項(xiàng)目經(jīng)理溝通
我們?cè)谖⑿派?4小時(shí)期待你的聲音
解答本文疑問(wèn)/技術(shù)咨詢/運(yùn)營(yíng)咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流
之前的一篇比較有意思的文章,抄抄冷飯。但是本身內(nèi)容并不過(guò)時(shí)~

成都創(chuàng)新互聯(lián)始終堅(jiān)持【策劃先行,效果至上】的經(jīng)營(yíng)理念,通過(guò)多達(dá)十余年累計(jì)超上千家客戶的網(wǎng)站建設(shè)總結(jié)了一套系統(tǒng)有效的營(yíng)銷推廣解決方案,現(xiàn)已廣泛運(yùn)用于各行各業(yè)的客戶,其中包括:成都陽(yáng)光房等企業(yè),備受客戶表?yè)P(yáng)。
今天的小技巧是使用純 CSS 生成火焰,逼真一點(diǎn)的火焰。
嗯,長(zhǎng)什么樣子?在 CodePen 上輸入關(guān)鍵字 CSS Fire,能找到這樣的:
或者這樣的:
我們希望,僅僅使用 CSS ,效果能再更進(jìn)一步嗎?能不能是這樣子:
嗯,我們需要使用 filter + mix-blend-mode 的組合來(lái)完成。
如上圖,整個(gè)蠟燭的骨架, 除去火焰的部分很簡(jiǎn)單,掠過(guò)不講。主要來(lái)看看火焰這一塊如何生成,并且如何賦予動(dòng)畫效果。
模糊濾鏡疊加對(duì)比度濾鏡產(chǎn)生的融合效果。
單獨(dú)將兩個(gè)濾鏡拿出來(lái),它們的作用分別是:
filter: blur():給圖像設(shè)置高斯模糊效果。
filter: contrast():調(diào)整圖像的對(duì)比度。
但是,當(dāng)他們“合體”的時(shí)候,產(chǎn)生了奇妙的融合現(xiàn)象。
先來(lái)看一個(gè)簡(jiǎn)單的例子:
仔細(xì)看兩圓相交的過(guò)程,在邊與邊接觸的時(shí)候,會(huì)產(chǎn)生一種邊界融合的效果,通過(guò)對(duì)比度濾鏡把高斯模糊的模糊邊緣給干掉,利用高斯模糊實(shí)現(xiàn)融合效果。
利用上述 filter blur & filter contrast,我們要先生成一個(gè)類似火焰形狀的三角形。(略去過(guò)程)
父元素添加 filter: blur(5px) contrast(20),會(huì)變成這樣:
看著已經(jīng)有點(diǎn)樣子了,接下來(lái)是火焰動(dòng)畫,我們先去掉父元素的 filter: blur(5px) contrast(20) ,然后繼續(xù) 。
這里也是利用了 filter 的融合效果,我們?cè)谏鲜龌鹧嬷校?SASS 隨機(jī)均勻分布大量大小不一的圓形棕色 div ,隱匿在火焰三角內(nèi)部,大概是這樣:
接下來(lái),我們?cè)倮?SASS,給中間每個(gè)小圓賦予一個(gè)從下往上逐漸消失的動(dòng)畫,并且均勻賦予不同的 animation-delay,看起來(lái)會(huì)是這樣:
OK,最重要的一步,我們?cè)侔迅冈氐?filter: blur(5px) contrast(20) 打開,神奇的火焰效果就出來(lái)了:
當(dāng)然,上述效果已經(jīng)很不錯(cuò)了。經(jīng)過(guò)各種嘗試,調(diào)整參數(shù),最后我發(fā)現(xiàn)加上 mix-blend-mode: screen 混合模式,效果更好,得到頭圖上面的最終效果如下:
完整源碼在我的CodePen 上:CodePen Demo -- CSS Fire[2]
當(dāng)然,掌握了這種方法后,這種生成火焰的技巧也可以遷移到其他效果去。下圖是我鼓搗到另外一個(gè)小 Demo,當(dāng) hover 到元素的時(shí)候,產(chǎn)生火焰效果:
CodePen Demo -- Hover Fire[3]
嗯,這些其實(shí)都是對(duì)濾鏡及混合模式的一些搭配運(yùn)用。按照慣例,肯定有人會(huì)留言噴了,整這些花里胡哨的有什么用,性能又不好,業(yè)務(wù)中敢上不把你的腿給打骨折。
于我而言,虛心接受各種批評(píng)質(zhì)疑及各種不同的觀點(diǎn),當(dāng)然我是覺得搞技術(shù)一方面是實(shí)用,另一方面是興趣使然,自?shī)首詷?。希望噴子繞道~
回到正題,了解了這種黏糊糊濕答答的技巧后,還可以折騰出其他很多有意思的效果,當(dāng)然可能需要更多的去嘗試,如下面使用一個(gè)標(biāo)簽實(shí)現(xiàn)的滴水效果:
CodePen Demo -- 單標(biāo)簽實(shí)現(xiàn)滴水效果[4]
動(dòng)畫雖然美好,但是具體使用的過(guò)程中,仍然有一些需要注意的地方:
1.CSS 濾鏡可以給同個(gè)元素同時(shí)定義多個(gè),例如 filter: blur(5px) contrast(150%) brightness(1.5) ,但是濾鏡的先后順序不同產(chǎn)生的效果也是不一樣的;
2.濾鏡動(dòng)畫需要大量的計(jì)算,不斷的重繪頁(yè)面,屬于非常消耗性能的動(dòng)畫,使用時(shí)要注意使用場(chǎng)景。記得開啟硬件加速及合理使用分層技術(shù);
3.blur() 混合 contrast() 濾鏡效果,設(shè)置不同的顏色會(huì)產(chǎn)生不同的效果,這個(gè)顏色疊加的具體算法暫時(shí)沒有找到很具體的規(guī)則細(xì)則,使用時(shí)比較好的方法是多嘗試不同顏色,觀察取最好的效果;
4.細(xì)心的讀者會(huì)發(fā)現(xiàn)上述效果都是基于黑色底色進(jìn)行的,動(dòng)手嘗試將底色改為白色,效果會(huì)大打折扣。
本文只是簡(jiǎn)單的介紹了整個(gè)思路過(guò)程,許多 CSS 代碼細(xì)節(jié),調(diào)試過(guò)程沒有展現(xiàn)出來(lái)。主要幾個(gè) CSS 屬性默認(rèn)大家已經(jīng)掌握了大概,閱讀后可以自行去了解補(bǔ)充更多細(xì)節(jié):
更多精彩 CSS 技術(shù)文章匯總在我的 Github -- iCSS[5] ,持續(xù)更新,歡迎點(diǎn)個(gè) star 訂閱收藏。
好了,本文到此結(jié)束,希望對(duì)你有幫助 ????
如果還有什么疑問(wèn)或者建議,可以多多交流,原創(chuàng)文章,文筆有限,才疏學(xué)淺,文中若有不正之處,萬(wàn)望告知。
[1]你所不知道的 CSS 濾鏡技巧與細(xì)節(jié):
https://github.com/chokcoco/iCSS/issues/30
[2]CodePen Demo -- CSS Fire:
https://codepen.io/Chokcoco/pen/jJJbmz
[3]CodePen Demo -- Hover Fire:
https://codepen.io/Chokcoco/pen/aMRPjR
[4]CodePen Demo -- 單標(biāo)簽實(shí)現(xiàn)滴水效果:
https://codepen.io/Chokcoco/pen/gZVjJw[5]Github -- iCSS: https://github.com/chokcoco/iCSS

我們?cè)谖⑿派?4小時(shí)期待你的聲音
解答本文疑問(wèn)/技術(shù)咨詢/運(yùn)營(yíng)咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流