徑向漸變 - CSS3 Radial Gradients

簡介 - Introduction

漸變在網(wǎng)站中常常用到:如果你想使得(按鈕,標題等)有生氣,就可以使用漸變蟀淮。雖然你應(yīng)該盡量少的使用漸變,以免網(wǎng)頁看起來像是圣誕樹一樣钞澳。以往我們常常使用背景圖片來給我們的界面添加漸變效果怠惶,而且這種方式還是可以的,但是這種方式顯得不那么靈活轧粟。因為策治,每次你想要改變漸變的顏色,大小以及漸變的方向時兰吟,你都不得不在圖片編輯軟件中對圖片做修改通惫。
CSS Image Values and Replaced Content Module Level 3允許我們以編程的方式在元素上創(chuàng)建漸變。你可以通過代碼來改變漸變的顏色混蔼,方向等履腋,并且是如此的靈活。例如,你可以在元素上以不同的百分比設(shè)置color stops遵湖;當元素的尺寸發(fā)生改變時悔政,漸變也會做出調(diào)整來適應(yīng)。
在說明書中定義了2種漸變延旧, linear gradients and radial gradients谋国。在前一篇文章中,我們闡述了線性漸變 - CSS3 linear gradients迁沫。這篇文章將關(guān)注于徑向漸變芦瘾。我們將會闡述所有的基礎(chǔ)語法,并會在接近文章尾部的地方集畅,看一下repeating-radial-gradient近弟。

線性漸變語法回顧 - Linear gradient syntax recap

做個回顧,線性漸變的語法其實是相當簡單的:

background-image:linear-gradient(
    to bottom right,
    rgb(255, 0, 0),
    rgb(100, 0, 0) 50%,
    rgb(50, 0, 0) 75%,
    rgb(150, 0, 0)
);

在括號中挺智,第一行設(shè)置了漸變的方向藐吮,緊接著設(shè)置了一系列的color stops,漸變在這些color stops之間自然地流動逃贝。上面的示例所創(chuàng)建的漸變 如下圖所示:

Screen Shot 2017-07-09 at 6.57.26 PM.png

注意:Oper, Firefox, IE的最新版本全都支持線性漸變的當前語法谣辞,即不用使用前綴,然而基于WebKit的瀏覽器仍然使用舊的語法沐扳。為了兼容舊版本的瀏覽器和基于WebKit的瀏覽器泥从,你應(yīng)該包含帶開發(fā)商前綴。
需要注意的是:

  • to關(guān)鍵字的方向 與 不帶to關(guān)鍵字的方向 之間的區(qū)別沪摄。具體請參考我所翻譯的上篇文章躯嫉。
  • 當為方向指定角度時,你所使用的角度時羅盤角杨拐。以往的0度是數(shù)學中的0度祈餐,而現(xiàn)在的零度是以背景區(qū)域的中心為起點屏箍,指向豎直向上的方向 為0度仓坞。

完整的代碼示例如下:

background-image:-webkit-linear-gradient(top left, rgb(255,0,0), rgb(100,0,0) 50%, rgb(50,0,0) 75%, rgb(150,0,0));
background-image:-moz-linear-gradient(top left, rgb(255,0,0), rgb(100,0,0) 50%, rgb(50,0,0) 75%, rgb(150,0,0));
background-image:-ms-linear-gradient(top left, rgb(255,0,0), rgb(100,0,0) 50%, rgb(50,0,0) 75%, rgb(150,0,0));
background-image:-o-linear-gradient(top left, rgb(255,0,0), rgb(100,0,0) 50%, rgb(50,0,0) 75%, rgb(150,0,0));
background-image:linear-gradient(to bottom right, rgb(255,0,0), rgb(100,0,0) 50%, rgb(50,0,0) 75%, rgb(150,0,0));

徑向漸變語法 - Radial gradient syntax

徑向漸變稍微有點復雜,但是也不需要話費太多時間來適應(yīng)氨距。其語法形式如下:

radial-gradient(
    `size shape` at `position`,      //  `是分隔符屋吨,沒有實際的語意
    `colour stops`
);

就像線性漸變一樣蜒谤,Opera,F(xiàn)irefox和IE全都支持最新的‘不帶前綴的徑向漸變語法’至扰△⒒眨基于WebKit-的瀏覽器仍使用舊式的語法(需要帶前綴)。舊式的徑向漸變語法也是使用相同的values敢课,但是形式不同:

radial-gradient(
    `position`,
    `size and shape`,
    `colour stops`
);

所以兼容所有瀏覽器的示例 看起來是 這樣子的:

-webkit-radial-gradient(50% 50%, circle, rgb(75, 75, 200), rgb(0, 0, 75));
-moz-radial-gradient(50% 50%, circle, rgb(75, 75, 200), rgb(0, 0, 75));
-ms-radial-gradient(50% 50%, circle, rgb(75, 75, 200), rgb(0, 0, 75));
-o-radial-gradient(50% 50%, circle, rgb(75, 75, 200), rgb(0, 0, 75));
radial-gradient(circle at 50% 50%, rgb(75, 75, 200), rgb(0, 0, 75));

上面示例會創(chuàng)建一個柔和的藍色漸變(從元素的中心向外漸變)绷杜,結(jié)果如下圖:

https://dev.opera.com/articles/css3-radial-gradients/gradients3.png

現(xiàn)在讓我們來深入了解下:postion, size and shape, colour stops

position

徑向漸變發(fā)散的起始位置position指定了:徑向漸變的中心點的位置(漸變從哪個位置向外發(fā)散)濒募。position位于at后接剩,position可以是關(guān)鍵字和unit values,指定position的方式 和 指定CSS中background-position的方式基本一致萨咳。

  • circle at left top意味著:把漸變的中心點放置在左上角。
https://dev.opera.com/articles/css3-radial-gradients/position1.png
  • circle at 20% 70%意味著:把漸變的中心點放置在 距離元素左側(cè)20% 距離元素頂部70% 的位置疫稿。
https://dev.opera.com/articles/css3-radial-gradients/position2.png
  • circle at 70px 80px意味著:把漸變的中心點放置在 距離元素左側(cè)70px 距離元素頂部80px 的位置培他。
https://dev.opera.com/articles/css3-radial-gradients/position3.png
  • circle at 0%意味著:把漸變的中心點放置在 元素的左側(cè)邊 垂直居中。如果你只指定了一個值遗座,該值會被認為是水平方向上的值舀凛,垂直方向上的值默認為50%(也就是垂直居中)。
https://dev.opera.com/articles/css3-radial-gradients/position4.png
  • 如果你沒有為gradient position設(shè)置任何值途蒋,gradient position會默認為元素的背景區(qū)域的中心猛遍,即是center center或者50% 50%
https://dev.opera.com/articles/css3-radial-gradients/gradients3.png

size and shape

漸變的size and shape是通過使用 顯式的sizeshape關(guān)鍵字組合的方式号坡,或者隱式的sizeshape關(guān)鍵字組合的方式 來設(shè)置的懊烤。

Explicit sizes

當使用顯式的size時,你所設(shè)置的2個values 是gradient shape的水平半徑和垂直半徑宽堆。如果你指定了circle關(guān)鍵字 和 一個值腌紧,你會得到一個圓。如果你指定了ellipse關(guān)鍵字和2個值畜隶,或者僅僅指定了2個值壁肋,你會得到一個橢圓。你可以使用任意的CSS units籽慢,只要在它所處的情況中合理即可浸遗,但是你不能使用百分比。

  • 40px circle意味著:使 漸變的形狀是圓的箱亿,而且半徑是40px跛锌。
https://dev.opera.com/articles/css3-radial-gradients/size1.png
  • 2em 4em ellipse意味著: 使 漸變的形狀是橢圓,水平方向的半徑是2em届惋,垂直方向的半徑是4em察净。
https://dev.opera.com/articles/css3-radial-gradients/size2.png
  • 注意:如果你沒有設(shè)置任何值,會設(shè)置ellipse cover為默認值盼樟。(下面的部分會介紹cover關(guān)鍵字)
Implicit sizes

當使用隱式的size時氢卡,你可以使用若干個不同的關(guān)鍵字。這些關(guān)鍵字指定了:你想讓漸變的形狀circle, ellipse的最外沿接觸到容器的最近角晨缴,最遠角译秦,還是最近邊最遠邊(最近,最遠都是相對于position的位置而定的)筑悴。在這個示例中们拙,我們使button為正方形,并且設(shè)置漸變中心的位置為:水平35%阁吝,垂直25%砚婆。

  • closest-side circle at 35% 25%會使?jié)u變的最外沿接觸到 距離漸變中心最近的 元素的那條邊。把circle更換為ellipse突勇,會使?jié)u變的最外沿接觸到 距離漸變中心最近的 元素的那2條邊装盯。你可以使用關(guān)鍵字contain來代替closest-side
https://dev.opera.com/articles/css3-radial-gradients/circle-closest-side.png

https://dev.opera.com/articles/css3-radial-gradients/ellipse-closest-side.png
  • closest-corner circle at 35% 25%會使?jié)u變的最外沿接觸到 距離漸變中心最近的 元素的那個角甲馋。把circle更換為ellipse埂奈,也是同樣的效果。
https://dev.opera.com/articles/css3-radial-gradients/circle-closest-corner.png

https://dev.opera.com/articles/css3-radial-gradients/ellipse-closest-corner.png
  • farthest-side circle at 35% 25%會使?jié)u變的最外沿接觸到 距離漸變中心最遠的 元素的那條邊定躏。把circle更換為ellipse账磺,會使?jié)u變的最外沿接觸到 距離漸變中心最遠的 元素的那2條邊。
https://dev.opera.com/articles/css3-radial-gradients/circle-farthest-side.png

https://dev.opera.com/articles/css3-radial-gradients/ellipse-farthest-side.png
  • farthest-corner circle at 35% 25%會使 漸變的最外沿接觸到 距離漸變中心最遠的 元素的那個角痊远。不管是circle還是ellipse垮抗,你都可以使用關(guān)鍵字cover來代替farthest-corner
https://dev.opera.com/articles/css3-radial-gradients/circle-farthest-corner.png

https://dev.opera.com/articles/css3-radial-gradients/ellipse-farthest-corner.png
Colour stops

在徑向漸變語法的最后部分碧聪,你可以指定至少2個color stops - 這些color stops指定了沿著漸變方向的不同位置上 是 什么顏色借宵,并且瀏覽器會填充color stops之間的顏色。你可以在沿著漸變方向的不同位置上 使用任意的單位矾削,只要合理即可壤玫。你也可以使用不同的方式指定顏色(16進制顏色值,關(guān)鍵字哼凯,rgb欲间,rgba等等)。每個color stop之間是 使用逗號分隔的断部。

  • #ff0000, #000000: color stop最簡單的設(shè)置是 只使用2個顏色猎贴。當color stop后 沒指定position時,瀏覽器會 默認第一個color stop0%位置蝴光,第二個color stop100%位置(100%即是在最外沿)她渴。
https://dev.opera.com/articles/css3-radial-gradients/colour-stop1.png
  • rgb(255,0,0), rgb(150,150,150) 50%, rgb(0,0,0): 這兒我們有3個color stop,并且是使用RGB來設(shè)置顏色的蔑祟。第一個顏色 在漸變方向上的位置為0%趁耗,最后一個顏色 在漸變方向上的位置為100%,但是我們還有一個不同的color stop50%位置疆虚。
https://dev.opera.com/articles/css3-radial-gradients/colour-stop2.png
  • rgb(255,0,0) 20px, rgb(150,150,150) 40px, rgb(0,200,0) 60px, rgb(0,0,0) 80px: 4個color stop苛败,這次使用pixel values 在漸變方向上 放置 顏色值满葛。你會發(fā)現(xiàn):如果你不指定在漸變起始位置和結(jié)束位置上的顏色值,起始位置的顏色值 會采用第一個color stop的顏色值罢屈,同樣地 結(jié)束位置的顏色值 會采用最后一個color stop的顏色值嘀韧。
https://dev.opera.com/articles/css3-radial-gradients/colour-stop3.png

讓我們來看個實際使用中的示例:

background-image:-webkit-radial-gradient(30% 40%, rgb(255,0,0), rgb(0,0,0));
background-image:-moz-radial-gradient(30% 40%, rgb(255,0,0), rgb(0,0,0));
background-image:-ms-radial-gradient(30% 40%, rgb(255,0,0), rgb(0,0,0));
background-image:-o-radial-gradient(30% 40%, rgb(255,0,0), rgb(0,0,0));
background-image:radial-gradient(circle at 30% 40%, rgb(255,0,0), rgb(0,0,0));

上面示例的效果(活生生的示例) 如下圖:

https://dev.opera.com/articles/css3-radial-gradients/radial-gradient.png

當鼠標hover在按鈕上時,按鈕稍微下陷缠捌。當按鈕被點擊時锄贷,它們會深深的陷入。我通過在鼠標的hover曼月,active狀態(tài)下 使用各種inset box shadow來達到效果谊却。

Repeating radial gradients

和線性漸變的方式一樣,你可以通過使用相關(guān)的repeat property 來創(chuàng)建repeating-radial-gradient十嘿。
repeating-radial-gradient僅僅是采用 你為徑向漸變設(shè)置的方式,并重復這個方式 到元素的邊界岳锁。

background:-webkit-repeating-radial-gradient(center, 30px 30px, #009, #0000FA 50%, #009);
background:-moz-repeating-radial-gradient(center, 30px 30px, #009, #0000FA 50%, #009);
background:-ms-repeating-radial-gradient(center, 30px 30px, #009, #0000FA 50%, #009);
background:-o-repeating-radial-gradient(center, 30px 30px, #009, #0000FA 50%, #009);
background:repeating-radial-gradient(30px circle, #009, #0000FA 50%, #009);

效果如下圖:


https://dev.opera.com/articles/css3-radial-gradients/repeating-examples.png

總結(jié)- Summary

我希望 這篇文章給了你:在你的設(shè)計中開始使用徑向漸變 所需要知道的所有知識點绩衷!請讓我們知道:你認為Opera's implementation怎么樣 - 回饋總是有幫助的,不論好壞激率?
你在這兒看到的 并不是徑向漸變的使用極限咳燕。你可以 在任何你可以使用圖片的地方 使用徑向漸變,所以你應(yīng)該嘗試在border-image, list-style-image...中 使用徑向漸變乒躺。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末招盲,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子嘉冒,更是在濱河造成了極大的恐慌曹货,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,723評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件讳推,死亡現(xiàn)場離奇詭異顶籽,居然都是意外死亡,警方通過查閱死者的電腦和手機银觅,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,485評論 2 382
  • 文/潘曉璐 我一進店門礼饱,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人究驴,你說我怎么就攤上這事镊绪。” “怎么了洒忧?”我有些...
    開封第一講書人閱讀 152,998評論 0 344
  • 文/不壞的土叔 我叫張陵蝴韭,是天一觀的道長。 經(jīng)常有香客問我熙侍,道長万皿,這世上最難降的妖魔是什么摧找? 我笑而不...
    開封第一講書人閱讀 55,323評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮牢硅,結(jié)果婚禮上蹬耘,老公的妹妹穿的比我還像新娘。我一直安慰自己减余,他們只是感情好综苔,可當我...
    茶點故事閱讀 64,355評論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著位岔,像睡著了一般如筛。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上抒抬,一...
    開封第一講書人閱讀 49,079評論 1 285
  • 那天杨刨,我揣著相機與錄音,去河邊找鬼擦剑。 笑死妖胀,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的惠勒。 我是一名探鬼主播赚抡,決...
    沈念sama閱讀 38,389評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼纠屋!你這毒婦竟也來了涂臣?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,019評論 0 259
  • 序言:老撾萬榮一對情侶失蹤售担,失蹤者是張志新(化名)和其女友劉穎赁遗,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體族铆,經(jīng)...
    沈念sama閱讀 43,519評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡吼和,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,971評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了骑素。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片炫乓。...
    茶點故事閱讀 38,100評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖献丑,靈堂內(nèi)的尸體忽然破棺而出末捣,到底是詐尸還是另有隱情,我是刑警寧澤创橄,帶...
    沈念sama閱讀 33,738評論 4 324
  • 正文 年R本政府宣布箩做,位于F島的核電站,受9級特大地震影響妥畏,放射性物質(zhì)發(fā)生泄漏邦邦。R本人自食惡果不足惜安吁,卻給世界環(huán)境...
    茶點故事閱讀 39,293評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望燃辖。 院中可真熱鬧鬼店,春花似錦、人聲如沸黔龟。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,289評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽氏身。三九已至巍棱,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間蛋欣,已是汗流浹背航徙。 一陣腳步聲響...
    開封第一講書人閱讀 31,517評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留陷虎,地道東北人到踏。 一個月前我還...
    沈念sama閱讀 45,547評論 2 354
  • 正文 我出身青樓,卻偏偏與公主長得像泻红,于是被迫代替她去往敵國和親夭禽。 傳聞我的和親對象是個殘疾皇子霞掺,可洞房花燭夜當晚...
    茶點故事閱讀 42,834評論 2 345

推薦閱讀更多精彩內(nèi)容

  • CSS邊框?qū)傩?元素的邊框就是圍繞元素內(nèi)容和內(nèi)邊距的一條或多條線谊路。 元素的邊框?qū)傩裕?border 簡寫屬性,用...
    Zd_silent閱讀 975評論 0 1
  • 本文轉(zhuǎn)載自:http://southpeak.github.io/2014/12/10/quartz2d-8/ Q...
    idiot_lin閱讀 863評論 0 3
  • 今天出去吃飯菩彬,飯后搞活動送了個小禮品缠劝。禮品本身不值一提,重要的的是漸變骗灶。本篇就介紹并實際做一下這個漸變效果惨恭。 線性...
    張歆琳閱讀 3,214評論 6 14
  • ###三十天自重訓練結(jié)果 經(jīng)過一個月的練習,如今,俯臥撐的數(shù)量增加了,我的練習目標是最終能夠達到單手做至少一個倒立...
    Lincoln佳閱讀 1,025評論 0 51
  • 感恩自己最近的勤快,每天都比鬧鐘醒的早耙旦,開始一天的早飯忙碌脱羡,自己吃點飯趕緊去駕校科目三練車免都,下來還是陽光高照锉罐,...
    倆寶的媽咪閱讀 125評論 0 3