深入了解box-shadow

2023-03-02 14:24 更新
陰影(box-shadow),要使用此屬性,可以說(shuō)很簡(jiǎn)單,但要真正地利用好它,卻又不是一件容易的事。今天我們就來(lái)深入了解一下box-shadow。

先來(lái)看看詞法:

box-shadow:[inset] x-offset y-offset blur-radius spread-radius color;

參數(shù)說(shuō)明:
  • 陰影類(lèi)型:可選;如省略,默認(rèn)是外陰影;它有且只有一個(gè)值“inset”,表示為內(nèi)陰影;
  • x-offset:陰影水平偏移量,它可以是正負(fù)值。如為正值,則陰影在元素的右邊;如其值為負(fù)值,則陰影在元素的左邊;
  • y-offset:陰影垂直偏移量,它可以是正負(fù)值。如為正值,則陰影在元素的底部;如其值為負(fù)值時(shí),則陰影在元素的頂部;
  • blur-radius:陰影模糊半徑,可選,它只能是正值。如值為0,則陰影不具有模糊效果;它的值越大,陰影的邊緣就越模糊;
  • spread-radius:陰影擴(kuò)展半徑,可選,它可以是正負(fù)值。如為正值,則擴(kuò)大陰影的尺寸;如為負(fù)值,則縮小陰影的尺寸;
  • color:陰影顏色,可選,如不設(shè)定顏色,瀏覽器會(huì)取默認(rèn)色,但各瀏覽器默認(rèn)取色不一致。(經(jīng)測(cè)試,在Safari上是半透明的,在chrome、firefox、ie上都是黑色的)。不推薦省略顏色值。

注意:顏色(color)也可以放在最前面的,inset值也可以放在最后面;陰影并不會(huì)占據(jù)空間,也就是說(shuō)它不會(huì)陰影布局。

簡(jiǎn)單用法:

box-shadow: 5px 4px 4px #000;

接下來(lái)來(lái)看看陰影繪制的步驟(參考:CSS揭秘):

  1. 以該元素相同的尺寸(border-box的尺寸)和位置,畫(huà)一個(gè)背景色為#000的正方形
  2. 把它向右移5px,向下移4px。
  3. 使用高斯模糊算法將它進(jìn)行4px的模糊處理。
  4. 最后,將原始圖形移到模糊圖形上方,接著將模糊圖形與原始元素的交集部分(也就是原始元素壓在模糊圖形的部分)去除。

最后一點(diǎn),我們很容易驗(yàn)證,只需將原始元素的背景色設(shè)置成半透明,你并沒(méi)有看到它下層有任何投影。

你也可以看W3C官網(wǎng)對(duì)box-shadow的分析:https://www.w3.org/TR/css3-background/#box-shadow

從這張圖中,我們可以看到border-radius圓角,陰影擴(kuò)展、陰影模糊以及padding都會(huì)影響元素陰影的:非零值的border-radius將會(huì)以相同的作用影響陰影的外形;元素陰影與box模型的層次一樣,外陰影會(huì)在元素背景之下,內(nèi)陰影會(huì)在邊框之下背景之上。所以整個(gè)疊加層級(jí)就是:邊框>內(nèi)陰影>背景圖片>背景顏色>外陰影。

最基本的例子(鄰邊陰影和四周陰影):


有些時(shí)候,我們只需一側(cè)有陰影,可是貌似box-shadow并沒(méi)有提供直接的設(shè)置值,不過(guò),別忘記了我們有第四個(gè)數(shù)值,它可以擴(kuò)大或縮小陰影的尺寸。

單邊陰影是這樣產(chǎn)生的:

上面最后一個(gè)圖形使用了多陰影,每個(gè)陰影之間用“,”逗號(hào)隔開(kāi)。

注意:設(shè)置多個(gè)陰影時(shí),覆蓋順序是由前至后,定義越前面的陰影有越高的層級(jí),會(huì)覆蓋在后面定義的陰影之上。

內(nèi)陰影外陰影的唯一區(qū)別在于偏移量正負(fù)值時(shí)的方向:

當(dāng)設(shè)置內(nèi)陰影(inset)時(shí),x-offset水平偏移量為負(fù)值時(shí),方向是右側(cè),為正值時(shí),方向是左側(cè);y-offset垂直偏移量為負(fù)值時(shí),方向是底部,為正值時(shí),方向是頂部。

實(shí)例:
(1)Loading


這是別人的神作,更多看這里:http://www.17sucai.com/pins/8148.html

(2)3D按鈕



當(dāng)然,box-shadow的作用并不會(huì)局限于此,只要你有耐心,相信你可以實(shí)現(xiàn)更加酷炫的效果。

如有不足之處,歡迎指正!


以上內(nèi)容是否對(duì)您有幫助:
在線(xiàn)筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)