小編給大家分享一下如何使用CSS實現(xiàn)極光效果,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!
為安陽等地區(qū)用戶提供了全套網(wǎng)頁設計制作服務,及安陽網(wǎng)站建設行業(yè)解決方案。主營業(yè)務為成都做網(wǎng)站、網(wǎng)站設計、安陽網(wǎng)站設計,以傳統(tǒng)方式定制建設網(wǎng)站,并提供域名空間備案等一條龍服務,秉承以專業(yè)、用心的態(tài)度為用戶提供真誠的服務。我們深信只要達到每一位用戶的要求,就會得到認可,從而選擇與我們長期合作。這樣,我們也可以走得更遠!
像是這樣:
emmm,這有點難為人了。不過,最近我也嘗試著去試了下,雖然不可能模擬出那么真實的效果,但是使用 CSS 還是可以作出類似的一些特效的,今天我們就一起來嘗試下。
觀察了一些極光的圖片之后,我發(fā)現(xiàn)了極光動畫中一些比較重要的元素:
基于深色背景的明亮漸變色彩
類似于水波流動的動畫效果
明亮漸變色彩我們可以盡量使用 漸變模擬。而水波流動的動畫效果,在 SVG 濾鏡中 feturbulence就是專門干這個的,這個濾鏡的使用在我過去的多篇文章中也有反復的提及過。
而除了漸變、SVG 的
濾鏡之外,我們可能還會用到混合模式(mix-blend-mode
)、CSS 濾鏡等提升效果。
OK,有了大概的思路后,剩下的就是不斷的嘗試。
首先,我們可能需要一個深色的背景,用于表示我們的夜空。同時點綴一些星星,星星可以使用 box-shadow
模擬,這樣,一副夜空背景我們可以在 1 個 p 內(nèi)完成:
@function randomNum($max, $min: 0, $u: 1) { @return ($min + random($max)) * $u; } @function shadowSet($n, $size) { $shadow : 0 0 0 0 #fff; @for $i from 0 through $n { $x: randomNum(350); $y: randomNum(500); $scale: randomNum($size) / 10; $shadow: $shadow, #{$x}px #{$y}px 0 #{$scale}px rgba(255, 255, 255, .8); } @return $shadow; } .g-wrap { position: relative; width: 350px; height: 500px; background: #0b1a3a; overflow: hidden; &::before { content: ""; position: absolute; width: 1px; height: 1px; border-radius: 50%; box-shadow: shadowSet(100, 6); }
這一步比較簡單,借助了 SASS 之后,我們能夠得到這樣一幅夜空背景圖:
接下來,就是利用漸變,畫出極光的一個輪廓效果。
其實就是一個徑向漸變:
.g-aurora { width: 400px; height: 300px; background: radial-gradient( circle at 100% 100%, transparent 45%, #bd63c1 55%, #53e5a6 65%, transparent 85% ); }
目前看來,是有一點點輪廓了。下一步,我們把得到的這個漸變效果通過旋轉(zhuǎn)拉伸變換一下。
.g-aurora { ... transform: rotate(45deg) scaleX(1.4); }
我們大概就能得到這樣一個效果:
到這里,其實雛形已經(jīng)出來了。但是顏色看著不太像,為了和深色的背景融合在一起,這里我們運用上混合模式 mix-blend-mode
。
.g-aurora { ... transform: rotate(45deg) scaleX(1.4); mix-blend-mode: color-dodge; }
神奇的事情發(fā)生了,看看效果:
整體的顏色看上去更加像極光的顏色。
接下來,我們要產(chǎn)生水紋波動的效果,需要借助 SVG 的
濾鏡,對這個濾鏡還不太了解的,可以看看我的這幾篇文章:
有意思!強大的 SVG 濾鏡
震驚!巧用 SVG 濾鏡還能制作表情包?
實現(xiàn)一個會動的鴻蒙 LOGO
回歸正題。我們添加一個 SVG 的
濾鏡,利用 CSS filter
進行引用
.g-aurora { ... transform: rotate(45deg) scaleX(1.4); mix-blend-mode: color-dodge; filter: url(#wave); }
我們即可得到這樣一種效果:
Wow,是不是已經(jīng)很有那種感覺了。通過 feturbulence 的特性,我們近乎模擬出了極光的效果!
最后一步,我們就需要讓我們的極光動起來。由于 SVG 動畫本身不支持類似 animation-fill-mode: alternate
這種特性。我們還是需要寫一點 JavaScript 代碼,控制動畫的整體循環(huán)。
大概的代碼是這樣:
var filter = document.querySelector("#turbulence"); var frames = 0; var rad = Math.PI / 180; function freqAnimation() { bfx = 0.005; bfy = 0.005; frames += .5 bfx += 0.0025 * Math.cos(frames * rad); bfy += 0.0025 * Math.sin(frames * rad); bf = bfx.toString() + ' ' + bfy.toString(); filter.setAttributeNS(null, 'baseFrequency', bf); window.requestAnimationFrame(freqAnimation); } window.requestAnimationFrame(freqAnimation);
至此,我們就得到了一幅完整的,會動的極光動畫:
以上是“如何使用CSS實現(xiàn)極光效果”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對大家有所幫助,如果還想學習更多知識,歡迎關注創(chuàng)新互聯(lián)行業(yè)資訊頻道!