radial-gradient徑向漸變語法及輔助理解案例10則

CSS3 radial-gradient徑向漸變語法及輔助理解案例10則

這篇文章發(fā)布于 2017年11月23日,星期四,00:23,歸類于?css相關(guān)。 閱讀 9140 次, 今日 44 次

by?zhangxinxu?from?http://www.zhangxinxu.com/wordpress/?p=6521

本文可全文轉(zhuǎn)載,但需得到原作者書面許可,同時保留原作者和出處,摘要引流則隨意。

一、語法細(xì)節(jié)記不住怎么辦?

實際開發(fā)的時候,當(dāng)要使用radial-gradient徑向漸變的時候,腦中會有大概的語法,但是細(xì)節(jié)卻記不住,于是想快捷找個案例看看具體怎么用,然后直接套一下。通常一番搜索,會發(fā)現(xiàn)雖然是個簡單需求,但是正好滿足這個需求的頁面卻不好找,亂糟糟的。

下次遇到這種場景,直接來本站搜“徑向漸變”,或者直接搜索“漸變”,就有專門展示radial-gradient徑向漸變基本語法使用案例的文章。文章共展示了10例常見使用案例,相信一定可以覆蓋你的使用場景的。

首先,假設(shè)我們使用同一段HTML作為示意:

然后…

二、radial-gradient徑向漸變基本示例1:最基礎(chǔ)最簡單使用

CSS如下:

.radial-gradient {

? ? width: 400px; height: 200px;

? ? background: radial-gradient(yellow, red);

}

最終效果如下圖:

若要親自確認(rèn)效果,您可以狠狠地點(diǎn)擊這里:radial-gradient徑向漸變最基本語法效果demo

可見,對于徑向漸變,在不指定漸變類型以及位置的情況下,其漸變距離和位置是由容器的尺寸決定的。

例如本例之中,容器的寬高比是2:1,最終漸變呈現(xiàn)出來的形狀也是一個2:1的橢圓形,并且漸變顏色自動終止與容器的邊緣。

原理示意如下:

如果我們想指定漸變的形狀是一個圓形,形狀不受外部容器尺寸影響,可以使用circle關(guān)鍵字。

三、radial-gradient徑向漸變示例2:簡單的圓形漸變

CSS代碼如下:

.radial-gradient {

? ? width: 400px; height: 200px;

? ? background: radial-gradient(circle, yellow, red);

}

最終效果如下圖:

若要親自確認(rèn)效果,您可以狠狠地點(diǎn)擊這里:radial-gradient徑向漸變簡單圓形漸變效果demo

其漸變范圍(漸變結(jié)束線)示意如下圖,會發(fā)現(xiàn)既不是按照寬度來的,也不是按照高度來的,是按照最遠(yuǎn)邊角距離作為漸變結(jié)束線的:

要證明上面結(jié)論比較簡單,我們可以計算下對角線一半長度,為:Math.sqrt(200*200 + 400*400) ≈ 223.6,于是,我們設(shè)置:

.radial-gradient {

? ? width: 400px; height: 200px;

? ? background: radial-gradient(223.6px circle, yellow, red);

}

會發(fā)現(xiàn),最終效果和上面的效果截圖幾乎就是一模一樣的。而200px的半徑:

.radial-gradient {

? ? width: 400px; height: 200px;

? ? background: radial-gradient(200px circle, yellow, red);

}

取色就會發(fā)現(xiàn)邊緣顏色差異較大,說明默認(rèn)不是按照最短邊來渲染的。

四、radial-gradient徑向漸變示例3:指定漸變起始點(diǎn)位置

起始點(diǎn)位置可以通過at來指定,例如:

.radial-gradient {

? ? width: 400px; height: 200px;

? ? background: radial-gradient(circle at 50px 50px, yellow, red);

}

效果如下圖所示:

若要親自確認(rèn)效果,您可以狠狠地點(diǎn)擊這里:徑向漸變at確定漸變起始點(diǎn)demo

如果希望漸變是和容器保持一致比例的橢圓,則circle可以缺省,也就是直接radial-gradient(at 50px 50px, yellow, red)也是可以的。

50px 50px我們也可以使用百分比值代替,例如:

.radial-gradient {

? ? width: 400px; height: 200px;

? ? background: radial-gradient(circle at 12.5% 25%, yellow, red);

}

效果是一模一樣的。

五、radial-gradient徑向漸變示例4:指定漸變終止點(diǎn)位置

radial-gradient徑向漸變支持4個關(guān)鍵字可以指定漸變終止點(diǎn)位置,見下表:

關(guān)鍵字描述

closest-side漸變中心距離容器最近的邊作為終止位置。

closest-corner漸變中心距離容器最近的角作為終止位置。

farthest-side漸變中心距離容器最遠(yuǎn)的邊作為終止位置。

farthest-corner漸變中心距離容器最遠(yuǎn)的角作為終止位置。

根據(jù)上面的示意效果可以看出默認(rèn)值是farthest-corner。

現(xiàn)在,我們對CSS進(jìn)行調(diào)整,如下:

.radial-gradient {

? ? width: 400px; height: 200px;

? ? background: radial-gradient(closest-side circle at 50px 50px, yellow, red);

}

也就是圓形漸變終止于最短邊,結(jié)果效果如下圖:

若要親自確認(rèn)效果,您可以狠狠地點(diǎn)擊這里:徑向漸變終止于最短邊demo

六、radial-gradient徑向漸變示例5:指定漸變顏色斷點(diǎn)

如果指定多個顏色,但未指定具體斷點(diǎn)的位置,則這些顏色會均勻分配0%~100%的漸變區(qū)域,例如,下面4色漸變:

.radial-gradient {

? ? width: 200px; height: 200px;

? ? border: 1px solid silver;

? ? background: radial-gradient(closest-side circle, yellow, orange, red, white);

}

結(jié)果如下圖所示:

但從肉眼視覺我們是看不出是不是均勻分配漸變區(qū)域,但是我們可以通過其他方式驗證我們的觀點(diǎn),如下指定顏色斷點(diǎn)位置的CSS:

.radial-gradient2 {

? ? width: 200px; height: 200px;

? ? border: 1px solid gray;

? ? background: radial-gradient(closest-side circle, yellow, orange 33.33%, red 66.666%, white);

}

由于漸變顏色默認(rèn)第一個顏色位置是0%,最后一個顏色位置是100%,因此上面yellow和white的斷點(diǎn)位置可以缺省。

然后發(fā)現(xiàn)效果和上面的是一致的:

我做了個更能直觀體驗一致性的demo頁面,您可以狠狠地點(diǎn)擊這里:radial-gradient多個顏色均勻分配漸變區(qū)域demo

按下第一個圈圈漸變,會讓后面的圈圈瞬間覆蓋在上面。如果兩個漸變顏色有差異,此時肉眼可以感覺到明顯變化;但是實際操作下來,就好像后面漸變突然消失一般,這就說明上下兩個漸變實際上效果是一致的。

七、radial-gradient徑向漸變示例6:橢圓類型的徑向漸變

對于圓形界面,我們只需要指定一個半徑就可以了,但是對于橢圓類型的徑向漸變,我們需要同時指定橫軸和縱軸的長度,例如:

.radial-gradient {

? ? width: 200px; height: 200px;

? ? background: radial-gradient(50px 100px ellipse, transparent 40px, yellow 41px, red);

}

50px 100px ellipse中第一個數(shù)值50px表示橫軸半徑,100px表示縱軸半徑,于是這段語句表示繪制一個長度100px高度200px的橢圓。

效果如下圖:

若要親自確認(rèn)效果,您可以狠狠地點(diǎn)擊這里:radial-gradient徑向漸變橢圓漸變demo

需要注意的是,在上面示意CSS代碼中,透明到黃色分界那里有一個1px的偏差過渡,也就是transparent 40px, yellow 41px中yellow是41px,而不是設(shè)置的40px,原因在于在Chrome下,如果顏色直接0偏差過渡,會有比較嚴(yán)重的鋸齒,類似下圖這樣(背景色設(shè)為#333):

通過有1像素或者半像素的過渡緩沖可以有效避免鋸齒的出現(xiàn)。

八、radial-gradient徑向漸變示例7:可累加的徑向漸變背景圖

我們可以把多個徑向漸變累加在一起實現(xiàn)某些效果,例如下面CSS:

.radial-gradient {

? ? width: 200px; height: 200px;

? ? background: radial-gradient(50px 100px ellipse, transparent 40px, yellow 41px, red 49px, transparent 50px),

? ? ? ? ? ? ? ? radial-gradient(30px circle, red, red 29px, transparent 30px);

}

實現(xiàn)了“邪王真眼”效果:


若要親自感受效果,您可以狠狠地點(diǎn)擊這里:radial-gradient多個徑向漸變累加demo

九、radial-gradient徑向漸變示例8:漸變背景的尺寸控制

配合background-size的尺寸控制和背景重復(fù)特性,我們可以實現(xiàn)漸變式的復(fù)雜紋理效果:

.radial-gradient {

? ? width: 200px; height: 200px;

? ? background: radial-gradient(5px 10px ellipse, transparent 4px, yellow 5px, red 6px, transparent 7px),

? ? ? ? ? ? ? ? radial-gradient(3px circle, red, red 3px, transparent 4px);

? ? background-size: 25px;

}

于是就可以看到一大波寫輪眼:

通常我們使用徑向漸變構(gòu)建一些簡單實用圖形的時候,background-size往往是關(guān)鍵屬性,例如,我們要實現(xiàn)個水波效果,可以這樣:

.radial-gradient {

? ? width: 200px; height: 100px;

? ? background: red;

? ? position: relative;

}

.radial-gradient:after {

? ? content: '';

? ? position: absolute;

? ? height: 10px;

? ? left:0 ; right: 0;

? ? bottom: -10px;

? ? background: radial-gradient(20px 15px ellipse at top, red 10px, transparent 11px);

? ? background-size: 20px 10px;

}

然后就有下圖所示的效果:

實時效果體驗可以狠狠地點(diǎn)擊這里:徑向漸變尺寸控制下的波紋效果demo

十、radial-gradient徑向漸變示例9:可重復(fù)的徑向漸變

如果想要實現(xiàn)可重復(fù)的徑向漸變,亦可以使用原生的repeating-radial-gradient()方法,特別適合實現(xiàn)從中心擴(kuò)散的光波效果。

然而,相比重復(fù)線性漸變repeating-linear-gradient()方法,repeating-radial-gradient()的實際應(yīng)用場景實際上很有限。因為,實際開發(fā)的時候,我們很少用到從中心擴(kuò)散的光波效果。

除了一些本身就是波紋類型效果,如水波,聲波或者唱片紋理:

如下CSS(取自https://codepen.io/thebabydino/embed/HjJlL):

.radial-gradient {

? ? position: relative;

? ? width: 262px; height: 262px;

? ? border-radius: 50%;

? ? background: linear-gradient(30deg, transparent 40%, rgba(42, 41, 40, .85) 40%) no-repeat 100% 0, linear-gradient(60deg, rgba(42, 41, 40, .85) 60%, transparent 60%) no-repeat 0 100%, repeating-radial-gradient(#2a2928, #2a2928 4px, #ada9a0 5px, #2a2928 6px);

? ? background-size: 50% 100%, 100% 50%, 100% 100%;

}

.radial-gradient:after {

? ? position: absolute;

? ? top: 50%; left: 50%;

? ? margin: -35px;

? ? border: solid 1px #d9a388;

? ? width: 68px; height: 68px;

? ? border-radius: 50%;

? ? box-shadow: 0 0 0 4px #da5b33, inset 0 0 0 27px #da5b33;

? ? background: #b5ac9a;

? ? content: '';

}

效果如下圖:

效果體驗,可以狠狠地點(diǎn)擊這里:可重復(fù)徑向漸變下的膠片效果

十一、radial-gradient徑向漸變示例10:作為border-image的徑向漸變

徑向漸變不僅可以作為background的背景圖,還可以作為border-image的邊框圖使用。

例如:

.radial-gradient {

? ? width: 100px; height: 100px;

? ? border: 50px solid;

? ? border-image: radial-gradient(circle, transparent 50px, yellow 51px, red) 50 stretch;

}

效果:

天然鏤空效果,只可惜border-image是無法和border-radius同時生效的,否則,border-image可就要牛炸天了。

效果體驗,可以狠狠地點(diǎn)擊這里:radial-gradient徑向漸變與border-image呈現(xiàn)demo

十二、結(jié)束語

我真能寫!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 一、html5新特性 1.增加了一個專門用于繪畫的元素canvas 2.增加了用于媒體播放的音頻和視頻元素 3.增...
    空谷悠閱讀 676評論 0 2
  • 漸變 漸變分為線性漸變以及徑向漸變,下面來一一介紹 線性漸變 注意事項 默認(rèn)寫法,不加前綴,要在方向前面加to,順...
    likeli閱讀 529評論 0 1
  • 邊框box-shadow 也可以在偽元素中添加box-shadow效果: border-image border-...
    進(jìn)擊的阿群閱讀 481評論 0 1
  • 醉美鄉(xiāng)村花落誰家,一番預(yù)熱之后,民情高昂。有幾個明清院落的村子都很積極,人心空前一致。維修粉刷,打掃收拾,面目一新...
    陳錦輝閱讀 152評論 0 0
  • 時光在定格 碧水微藍(lán) 看得到湖底看得到你 鴛鴦生死相依 魚兒相愛結(jié)伴 倒影糾纏不舍分離 而你在我影子背后 倚在大樹...
    深北羽翼閱讀 242評論 3 8

友情鏈接更多精彩內(nèi)容