国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

目錄
SVG和CSS打造逼真雲(yún)朵效果
從基礎(chǔ)開(kāi)始
瞧!
實(shí)驗(yàn)feDisplacementMapscale屬性
修改box-shadowblur
使用圖層表達(dá)深度
使用numOctaves添加細(xì)節(jié)
結(jié)果如下
使用seed屬性實(shí)現(xiàn)無(wú)限變化
天馬行空
成就解鎖!涅菲勒雲(yún)朵生成器
首頁(yè) web前端 css教學(xué) 用SVG和CSS繪製逼真的雲(yún)

用SVG和CSS繪製逼真的雲(yún)

Apr 20, 2025 am 10:44 AM

SVG和CSS打造逼真雲(yún)朵效果

Drawing Realistic Clouds with SVG and CSS

希臘神話中,宙斯創(chuàng)造了雲(yún)仙女涅菲勒。和其它希臘神話一樣,這個(gè)故事相當(dāng)離奇。這裡是一個(gè)簡(jiǎn)短且合適的版本:

傳說(shuō)中,涅菲勒是宙斯以自己美麗妻子的形象創(chuàng)造的。一位凡人邂逅涅菲勒,愛(ài)上了她,他們一起……最終,不可思議的是,這朵雲(yún)誕下了半人半馬的半人馬嬰兒。

很奇怪,對(duì)吧?我個(gè)人也無(wú)法理解。幸運(yùn)的是,在瀏覽器中創(chuàng)建雲(yún)朵的過(guò)程要簡(jiǎn)單得多,也正經(jīng)得多。

最近,我發(fā)現(xiàn)開(kāi)發(fā)者Yuan Chuan實(shí)現(xiàn)了代碼生成的、逼真的雲(yún)朵效果。對(duì)我來(lái)說(shuō),這種在瀏覽器中實(shí)現(xiàn)的效果曾經(jīng)是神話故事。

只需瀏覽一下這個(gè)示例代碼,我們就能想像到,通過(guò)使用帶有<filter></filter>元素(包含兩個(gè)SVG濾鏡)的CSS box-shadow ,可以實(shí)現(xiàn)令人信服的單個(gè)雲(yún)朵效果。

我們想要的逼真效果是通過(guò)feTurbulencefeDisplacementMap的巧妙結(jié)合實(shí)現(xiàn)的。這些SVG濾鏡功能強(qiáng)大、複雜且提供了非常令人興奮的功能(包括一個(gè)奧斯卡獲獎(jiǎng)算法?。H欢?,其底層複雜性可能會(huì)讓人望而生畏。

雖然SVG濾鏡的物理原理超出了本文的範(fàn)圍,但在MDN和w3.org上提供了大量的文檔。關(guān)於feTurbulencefeDisplacementMap的非常有益的頁(yè)面是免費(fèi)提供的(並且作為這本精彩書(shū)籍的一個(gè)章節(jié))。

在本文中,我們將專注於學(xué)習(xí)如何使用這些SVG濾鏡來(lái)獲得驚人的效果。我們不需要深入了解幕後算法的運(yùn)作方式,就像藝術(shù)家不需要了解顏料的分子結(jié)構(gòu)就能渲染出令人驚嘆的風(fēng)景一樣。

相反,讓我們密切關(guān)注幾個(gè)對(duì)在瀏覽器中繪製令人信服的雲(yún)朵至關(guān)重要的SVG屬性。使用這些屬性,我們可以將這些強(qiáng)大的濾鏡運(yùn)用自如,並學(xué)習(xí)如何在自己的項(xiàng)目中精確地自定義它們。

從基礎(chǔ)開(kāi)始

CSS box-shadow屬性有五個(gè)值得關(guān)注的值:

 <code>box-shadow:<offsetx><offsety><blurradius><spreadradius><color> ;</color></spreadradius></blurradius></offsety></offsetx></code>

讓我們將這些值調(diào)高(可能高於任何理智的開(kāi)發(fā)者會(huì)使用的值),這樣陰影本身就會(huì)成為舞臺(tái)上的一個(gè)角色。

 <code>#cloud-square { background: turquoise; box-shadow: 200px 200px 50px 0px #000; width: 180px; height: 180px; } #cloud-circle { background: coral; border-radius: 50%; box-shadow: 200px 200px 50px 0px #000; width: 180px; height: 180px; }</code>

你玩過(guò)或者見(jiàn)過(guò)影子戲嗎?

就像用手改變形狀來(lái)改變陰影一樣,我們HTML中的“源形狀”可以移動(dòng)和變形來(lái)移動(dòng)和改變?cè)跒g覽器中渲染的陰影的形狀。 box-shadow複製了原始大小和border-radius上的“變形”功能。 SVG濾鏡同時(shí)應(yīng)用於元素及其陰影。

<code><svg height="0" width="0"><filter><feturbulence basefrequency=".01" numoctaves="10" type="fractalNoise"></feturbulence><fedisplacementmap in="SourceGraphic" scale="10"></fedisplacementmap></filter></svg></code>

這是我們目前SVG的標(biāo)記。它不會(huì)渲染,因?yàn)槲覀冞€沒(méi)有定義任何視覺(jué)效果(更不用說(shuō)零寬度和高度了)。它的唯一目的是保存一個(gè)濾鏡,我們將這個(gè)濾鏡提供給我們的SourceGraphic (也就是我們的<div>)。我們的源<code><div>及其陰影都由濾鏡獨(dú)立扭曲。我們將添加必要的CSS規(guī)則,使用其ID將HTML元素( <code>#cloud-circle )鏈接到SVG濾鏡:

 <code>#cloud-circle { filter: url(#filter); box-shadow: 200px 200px 50px 0px #fff; }</code>

瞧!

好吧,承認(rèn)吧,添加SVG濾鏡相當(dāng)不起眼。

別擔(dān)心!我們只是觸及了表面,還有很多好東西要看。

實(shí)驗(yàn)feDisplacementMapscale屬性

對(duì)這個(gè)屬性進(jìn)行一些非科學(xué)的實(shí)驗(yàn)可以產(chǎn)生戲劇性的效果。目前,讓我們保持feTurbulence中的所有值不變,只需調(diào)整DisplacementMapscale屬性。

隨著scale值的增加(以30為增量),我們的源<div>會(huì)發(fā)生扭曲,並投射出陰影來(lái)反映雲(yún)朵在天空中的隨機(jī)形態(tài)。<pre class="brush:php;toolbar:false">&lt;code&gt;&lt;fedisplacementmap in=&quot;SourceGraphic&quot; scale=&quot;180&quot;&gt;&lt;/fedisplacementmap&gt;&lt;/code&gt;</pre> <p>好了,我們有所進(jìn)展!讓我們稍微改變一下顏色,以產(chǎn)生更令人信服的雲(yún)朵效果,並增強(qiáng)效果。</p> <pre class="brush:php;toolbar:false"> &lt;code&gt;body { background: linear-gradient(165deg, #527785 0%, #7FB4C7 100%); } #cloud-circle { width: 180px; height: 180px; background: #000; border-radius: 50%; filter: url(#filter); box-shadow: 200px 200px 50px 0px #fff; }&lt;/code&gt;</pre> <p>現(xiàn)在我們更接近逼真的雲(yún)朵效果了!</p> <h3 id="修改-code-box-shadow-code-的-code-blur-code-值">修改<code>box-shadowblur

下面的圖像系列顯示了blur值對(duì)box-shadow的影響。在這裡, blur值以10像素為增量增加。

為了使我們的雲(yún)朵具有一些積雲(yún)般的效果,我們可以稍微加寬我們的源<div>。<pre class="brush:php;toolbar:false"> &lt;code&gt;#cloud-circle { width: 500px; height: 275px; background: #000; border-radius: 50%; filter: url(#filter); box-shadow: 200px 200px 60px 0px #fff; }&lt;/code&gt;</pre> <p>等等!我們加寬了源元素,現(xiàn)在它擋住了我們稱之為雲(yún)朵的白色陰影。讓我們將陰影“重新投射”到更遠(yuǎn)的距離,這樣我們的雲(yún)朵就不會(huì)被源圖像遮擋。 (可以想像一下,將你的手從牆上移開(kāi),這樣就不會(huì)擋住影子戲的視線。)</p> <p>這可以通過(guò)一些CSS定位輕鬆實(shí)現(xiàn)。<code><div>是雲(yún)朵的父元素,默認(rèn)情況下是靜態(tài)定位的。讓我們用一些絕對(duì)定位將我們的源<code><div>“塞”起來(lái)並移出文檔流。最初,這也會(huì)重新定位我們的陰影,因此我們還需要增加陰影與元素的距離,並稍微調(diào)整元素的位置。<pre class="brush:php;toolbar:false"> &lt;code&gt;#cloud-circle { width: 500px; height: 275px; background: #000; border-radius: 50%; filter: url(#filter); box-shadow: 400px 400px 60px 0px #fff; /* 增加陰影偏移量*/ position: absolute; /* 將父元素移出文檔流*/ top: -320px; /* 向下移動(dòng)*/ left: -320px; /* 向右移動(dòng)*/ }&lt;/code&gt;</pre> <p>是的!我們已經(jīng)得到了一個(gè)相當(dāng)令人信服的雲(yún)朵。</p> <p>渲染到瀏覽器中的圖像對(duì)雲(yún)朵的描繪相當(dāng)不錯(cuò)——但是,我不確定……這朵雲(yún)真的能體現(xiàn)雲(yún)仙女涅菲勒嗎?我相信我們可以做得更好!</p> <h3 id="使用圖層表達(dá)深度">使用圖層表達(dá)深度</h3> <p>這就是我們想要的:</p> <p>從這張照片中云朵的深度、紋理和豐富性來(lái)看,有一點(diǎn)很清楚:宙斯上過(guò)美術(shù)學(xué)校。至少,他一定讀過(guò)《設(shè)計(jì)的普遍原則》,其中闡述了一個(gè)強(qiáng)大而看似普通的概念:</p> <blockquote><p> […] 照明偏差在深度和自然感的解釋中起著重要作用,並且可以通過(guò)設(shè)計(jì)師以各種方式進(jìn)行操作……使用光暗區(qū)域之間的對(duì)比度來(lái)改變深度的外觀。</p></blockquote> <p>這段話為我們提供了一個(gè)線索,說(shuō)明我們?nèi)绾尾拍艽蟠蟾倪M(jìn)我們自己生成的雲(yún)朵代碼。我們可以通過(guò)將不同形狀、大小和顏色的圖層堆疊在一起,來(lái)渲染出與參考圖像中的雲(yún)朵高度相似的雲(yún)朵。這只需要根據(jù)需要多次調(diào)用我們的濾鏡即可。 </p> <pre class="brush:php;toolbar:false">&lt;code&gt;&lt;svg height=&quot;0&quot; width=&quot;0&quot;&gt;&lt;filter&gt;&lt;feturbulence basefrequency=&quot;0.012&quot; numoctaves=&quot;4&quot; type=&quot;fractalNoise&quot;&gt;&lt;/feturbulence&gt;&lt;fedisplacementmap in=&quot;SourceGraphic&quot; scale=&quot;170&quot;&gt;&lt;/fedisplacementmap&gt;&lt;/filter&gt;&lt;filter&gt;&lt;feturbulence basefrequency=&quot;0.012&quot; numoctaves=&quot;2&quot; type=&quot;fractalNoise&quot;&gt;&lt;/feturbulence&gt;&lt;fedisplacementmap in=&quot;SourceGraphic&quot; scale=&quot;150&quot;&gt;&lt;/fedisplacementmap&gt;&lt;/filter&gt;&lt;filter&gt;&lt;feturbulence basefrequency=&quot;0.012&quot; numoctaves=&quot;2&quot; type=&quot;fractalNoise&quot;&gt;&lt;/feturbulence&gt;&lt;fedisplacementmap in=&quot;SourceGraphic&quot; scale=&quot;100&quot;&gt;&lt;/fedisplacementmap&gt;&lt;/filter&gt;&lt;/svg&gt;&lt;/code&gt;</pre> <p>應(yīng)用我們的圖層將使我們有機(jī)會(huì)探索<code>feTurbulence並實(shí)現(xiàn)其多功能性。我們將選擇可用的更平滑的類型: fractalNoise ,並將numOctaves調(diào)高到6。

<code><feturbulence basefrequency="n" numoctaves="6" type="fractalNoise"></feturbulence></code>

這意味著什麼?現(xiàn)在,讓我們重點(diǎn)關(guān)注baseFrequency屬性。以下是我們?cè)黾觧的值時(shí)得到的結(jié)果:

諸如湍流、噪聲、頻率倍頻程之類的詞語(yǔ)可能顯得奇怪甚至令人困惑。但是別擔(dān)心!將這個(gè)濾鏡的效果比作聲波實(shí)際上是完全準(zhǔn)確的。我們可以將低頻( baseFrequency=0.001 )與低沉的噪聲聯(lián)繫起來(lái),並將高頻( baseFrequency=0.1 )與更高、更清晰的音調(diào)聯(lián)繫起來(lái)。

我們可以看到,對(duì)於積雲(yún)般的效果, baseFrequency的值可能舒適地位於~0.005和~0.01範(fàn)圍內(nèi)。

使用numOctaves添加細(xì)節(jié)

遞增numOctaves允許我們以極其精細(xì)的細(xì)節(jié)來(lái)渲染圖像。這需要大量的計(jì)算,因此請(qǐng)注意:高值會(huì)嚴(yán)重影響性能。除非你的瀏覽器戴著頭盔和護(hù)膝,否則盡量避免提高這個(gè)值。

好消息是,我們不需要將這個(gè)值調(diào)得太高就能產(chǎn)生細(xì)節(jié)和精細(xì)度。如上圖所示,我們可以將numOctaves值設(shè)置為4或5。

結(jié)果如下

使用seed屬性實(shí)現(xiàn)無(wú)限變化

關(guān)於seed屬性有很多內(nèi)容需要說(shuō)明,因?yàn)樗凳玖四会岚l(fā)生的魔法。但是,就我們的目的而言, seed的效用可以用四個(gè)字概括:“不同的值,不同的形狀”。

Perlin噪聲函數(shù)(前面提到過(guò))使用此值作為其隨機(jī)數(shù)生成器的起點(diǎn)。選擇不包含此屬性將默認(rèn)seed為零。但是,如果包含此屬性,無(wú)論我們賦予seed什麼值,都不需要擔(dān)心性能問(wèn)題。

上面的GIF代表了seed提供的一些功能。請(qǐng)記住,每一朵雲(yún)都是一個(gè)分層的複合雲(yún)。 (雖然我已經(jīng)調(diào)整了每個(gè)圖層的屬性,但我保持了它們各自的seed值一致。)

在這裡,仔細(xì)觀察參考圖像,我已經(jīng)將3個(gè)雲(yún)<div>(不透明度不同)疊加到一個(gè)基礎(chǔ)<code><div>上。通過(guò)反複試驗(yàn)和輸入任意<code>seed值,我最終得到了一個(gè)類似於照片中云朵形狀的形狀。

天馬行空

當(dāng)然,認(rèn)為我們繪製到瀏覽器上的<div>會(huì)優(yōu)於宙斯的涅菲勒,那將是狂妄自大。然而,我們能夠從CSS和SVG濾鏡中挖掘出越多的奧秘,我們就越有能力創(chuàng)造出視覺(jué)上令人驚嘆的東西,並且與雷神最初的創(chuàng)造高度相似。然後,我們可以繼續(xù)進(jìn)行進(jìn)一步的實(shí)驗(yàn)!<p>反射霧氣</p> <p>高層卷雲(yún)</p> <p>在本文中,我們只是涉足了一個(gè)充滿力量和復(fù)雜性的海洋。 SVG濾鏡通??雌饋?lái)令人不知所措且難以接近。</p> <p>然而,就像A Single Div項(xiàng)目中的示例或Diana Smith的繪畫(huà)技巧一樣,一種輕鬆愉快的實(shí)驗(yàn)方法總是會(huì)帶來(lái)驚人的結(jié)果!</p> <h4 id="成就解鎖-涅菲勒雲(yún)朵生成器">成就解鎖!涅菲勒雲(yún)朵生成器</h4> <p>我相信你們很多人很樂(lè)意深入了解製作雲(yún)朵所需的所有技術(shù)細(xì)節(jié),但可能更喜歡一些更方便在項(xiàng)目中使用雲(yún)朵的方法。我開(kāi)發(fā)了一個(gè)小工具來(lái)幫助生成雲(yún)朵並實(shí)驗(yàn)形狀和變化。</p> <p>生成雲(yún)朵!</p> <p>有任何問(wèn)題、建議或意見(jiàn)?請(qǐng)?jiān)赥witter上聯(lián)繫我,或在此帖中發(fā)表評(píng)論。</p> <p><small>非常感謝Amelia Bellamy-Royds對(duì)本文提出的寶貴建議。</small></p> </div>

以上是用SVG和CSS繪製逼真的雲(yún)的詳細(xì)內(nèi)容。更多資訊請(qǐng)關(guān)注PHP中文網(wǎng)其他相關(guān)文章!

本網(wǎng)站聲明
本文內(nèi)容由網(wǎng)友自願(yuàn)投稿,版權(quán)歸原作者所有。本站不承擔(dān)相應(yīng)的法律責(zé)任。如發(fā)現(xiàn)涉嫌抄襲或侵權(quán)的內(nèi)容,請(qǐng)聯(lián)絡(luò)admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費(fèi)脫衣圖片

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅(qū)動(dòng)的應(yīng)用程序,用於創(chuàng)建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費(fèi)的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費(fèi)的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強(qiáng)大的PHP整合開(kāi)發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺(jué)化網(wǎng)頁(yè)開(kāi)發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

神級(jí)程式碼編輯軟體(SublimeText3)

什麼是AutoPrefixer,它如何工作? 什麼是AutoPrefixer,它如何工作? Jul 02, 2025 am 01:15 AM

Autoprefixer是一個(gè)根據(jù)目標(biāo)瀏覽器範(fàn)圍自動(dòng)為CSS屬性添加廠商前綴的工具。 1.它解決了手動(dòng)維護(hù)前綴易出錯(cuò)的問(wèn)題;2.通過(guò)PostCSS插件形式工作,解析CSS、分析需加前綴的屬性、依配置生成代碼;3.使用步驟包括安裝插件、設(shè)置browserslist、在構(gòu)建流程中啟用;4.注意事項(xiàng)有不手動(dòng)加前綴、保持配置更新、非所有屬性都加前綴、建議配合預(yù)處理器使用。

CSS教程,用於創(chuàng)建粘性標(biāo)頭或頁(yè)腳 CSS教程,用於創(chuàng)建粘性標(biāo)頭或頁(yè)腳 Jul 02, 2025 am 01:04 AM

TocreatestickyheadersandfooterswithCSS,useposition:stickyforheaderswithtopvalueandz-index,ensuringparentcontainersdon’trestrictit.1.Forstickyheaders:setposition:sticky,top:0,z-index,andbackgroundcolor.2.Forstickyfooters,betteruseposition:fixedwithbot

什麼是圓錐級(jí)函數(shù)? 什麼是圓錐級(jí)函數(shù)? Jul 01, 2025 am 01:16 AM

theconic-Gradient()functionIncsscreatesCircularGradientsThatRotateColorStopSaroundAcentralPoint.1.IsidealForPieCharts,ProgressIndicators,colordichers,colorwheels和decorativeBackgrounds.2.itworksbysbysbysbydefindefingincolordefingincolorstopsatspecificains off.

CSS教程,用於創(chuàng)建加載旋轉(zhuǎn)器和動(dòng)畫(huà) CSS教程,用於創(chuàng)建加載旋轉(zhuǎn)器和動(dòng)畫(huà) Jul 07, 2025 am 12:07 AM

創(chuàng)建CSS加載旋轉(zhuǎn)器的方法有三種:1.使用邊框的基本旋轉(zhuǎn)器,通過(guò)HTML和CSS實(shí)現(xiàn)簡(jiǎn)單動(dòng)畫(huà);2.使用多個(gè)點(diǎn)的自定義旋轉(zhuǎn)器,通過(guò)不同延遲時(shí)間實(shí)現(xiàn)跳動(dòng)效果;3.在按鈕中添加旋轉(zhuǎn)器,通過(guò)JavaScript切換類來(lái)顯示加載狀態(tài)。每種方法都強(qiáng)調(diào)了設(shè)計(jì)細(xì)節(jié)如顏色、大小、可訪問(wèn)性和性能優(yōu)化的重要性,以提升用戶體驗(yàn)。

CSS教程專注於移動(dòng)優(yōu)先設(shè)計(jì) CSS教程專注於移動(dòng)優(yōu)先設(shè)計(jì) Jul 02, 2025 am 12:52 AM

Mobile-firstCSSdesignrequiressettingtheviewportmetatag,usingrelativeunits,stylingfromsmallscreensup,optimizingtypographyandtouchtargets.First,addtocontrolscaling.Second,use%,em,orreminsteadofpixelsforflexiblelayouts.Third,writebasestylesformobile,the

如何將整個(gè)網(wǎng)格集中在視口中? 如何將整個(gè)網(wǎng)格集中在視口中? Jul 02, 2025 am 12:53 AM

要讓整個(gè)網(wǎng)格佈局在視口中居中顯示,可通過(guò)以下方法實(shí)現(xiàn):1.使用margin:0auto實(shí)現(xiàn)水平居中,需設(shè)定容器固定寬度,適用於固定佈局;2.利用Flexbox在外層容器設(shè)置justify-content和align-items屬性,結(jié)合min-height:100vh可實(shí)現(xiàn)垂直和水平居中,適合全屏展示場(chǎng)景;3.直接使用CSSGrid的place-items屬性在父容器上快速居中,簡(jiǎn)潔且現(xiàn)代瀏覽器支持良好,同時(shí)需確保父容器有足夠高度。每種方式均有適用場(chǎng)景和限制,根據(jù)實(shí)際需求選擇合適的方案即可。

如何創(chuàng)建本質(zhì)上響應(yīng)的網(wǎng)格佈局? 如何創(chuàng)建本質(zhì)上響應(yīng)的網(wǎng)格佈局? Jul 02, 2025 am 01:19 AM

要?jiǎng)?chuàng)建內(nèi)在響應(yīng)式網(wǎng)格佈局,核心方法是使用CSSGrid的repeat(auto-fit,minmax())模式;1.設(shè)置grid-template-columns:repeat(auto-fit,minmax(200px,1fr))讓瀏覽器自動(dòng)調(diào)整列數(shù)並限制每列最小和最大寬度;2.使用gap控制格子間距;3.容器應(yīng)設(shè)為相對(duì)單位如width:100%、配合box-sizing:border-box避免寬度計(jì)算錯(cuò)誤並用margin:auto居中;4.可選設(shè)置行高與內(nèi)容對(duì)齊方式提升視覺(jué)一致性,如row

CSS中使用@supports的功能檢測(cè)是什麼? CSS中使用@supports的功能檢測(cè)是什麼? Jul 02, 2025 am 01:14 AM

prainuredetectionIncsssusissuse@supportScheckSifabRowsEsuppecifortSupecifortEfeatureBeforeApplyingReplyingStyles.1.itusesconditionalcsssssbasssbasedonproperty-valueperty-valuepairs,suessas@supports@supports@supports@supports(display:grid)

See all articles