您當前的位置:首頁 > 攝影

詳解box-shadow

作者:由 渡一教育 發表于 攝影時間:2022-01-19

今天我們來探究一下“陰影”。

這個陰影可不是什麼心理陰影。我們探究的陰影是圖形學中的陰影。同學們可以先想想,在圖片中有了陰影,或者使用了陰影之後,為我們的影象提供了哪些特殊的效果?在高中大家在學習美術的時候,那個時候接觸素描,去畫一個杯子,或者畫一個球體,這個時候往往出現,老師畫的很逼真,立體感、層次感很強,自己雖說畫出來了,在不刻意強調的前提下容易讓人們誤會(滑稽臉)。

經過老師的講解,我們知道想讓我們所畫的物體,具有立體感,通常有:高光,暗面,灰面,投影(陰影),這幾部分組成。說完了圖形中的陰影后,來想想如何在我們的頁面中繪畫出陰影。這就涉及到我們今天要說的內容CSS3中的box-shadow。

探究box-shadow

在先說box-shadow之前,大家先來看看幾張圖片,具體細緻的感受一下box-shadow陰影。

詳解box-shadow

一張很像紙的紙(廢話),有點陰影。

詳解box-shadow

What?這也是陰影?(不要拿border來騙我好吧。。。)

詳解box-shadow

這個也用box-shadow畫出來的?

上面的這些圖片確實是透過box-shadow畫出來的,同學們可能有些小震驚(圖一很微妙,圖三很炫酷,圖二有點開玩笑)。接下來我們來正式探究box-shadow的神奇黑魔法!!!!。

box-shadow直譯被稱為“盒子陰影”,直譯的結果與同學們的認知是相符的。CSS中存在盒模型,針對於盒模型的陰影唄。這點大家要記住,是針對於盒子(元素)的陰影,後面我們還會著重說明。

box-shadow屬性值由6部分組成。

語法形式:

box-shadow: offset-x offset-y blur spread color position;

這裡的position可以寫在最前面。也可以像上面一樣寫在最後面。

接下來我們來看看這幾個屬性都提供了什麼樣的功能?

1。offset-x offset-y

offset-x用於宣告陰影的水平偏移,就是陰影在X軸上的位置。當值為正數,陰影就位於元素右側,若值為負數,陰影位於元素的左側。

同理

offset-y用於宣告陰影的垂直偏移,就是陰影在Y軸上的位置。當值為正數,陰影就位於元素下側,若值為負數,陰影位於元素的上側。

例子:

CSS:

。demo{

width:100px;

height:100px;

background:#fcc;

box-shadow: 10px10px;

}

結果:

詳解box-shadow

透過這個我們能看出來是具有陰影的,根據上面的講解能看出來是(10px10px)向下向右偏移10個px,同理負值是向上向左偏移。接下來我們看blur

2。blur

blur表示陰影的模糊半徑。效果與設計軟體中使用的高斯模糊濾鏡一樣。值為0意味著陰影完全不模糊。blur值越大,邊角越不鋒利,陰影越朦朧。不允許負值,負值等同於0。在我們上面的例子中修改:

CSS:

box-shadow: 10px10px10px;

結果:

詳解box-shadow

我們能看到陰影虛化了。

這裡要注意的是:W3C中沒有規定瀏覽器廠商使用哪種方式實現模糊效果,反正效果與高斯模糊效果差不多就是了。但有一點我們需要注意的,那就是模糊效果會擴大陰影的面積。

詳解box-shadow

Demo0是blur半徑為0的效果,可以看到陰影尺寸與元素尺寸一模一樣。而demo1是blur半徑為10px的效果,可以看到陰影尺寸有所擴充套件了,而demo2則擴充套件得更多一些。

現在我們感性上認知到blur半徑值大於0時會擴充套件陰影尺寸,那麼到底擴充套件多少呢?那我們要先明確模糊發生的起始位置了。經過肉眼觀察,模糊發生的起始位置就是陰影盒子的各邊。事實也就是這樣。至於發散距離blurradius(虛化半徑)/ 2的距離。看的demo2中陰影尺寸已經與元素盒子重疊了,因為陰影盒子左邊框向左發散了15px了,超過它倆之間10px的水平距離了。

3。spread

spread表示陰影的大小。當值為正數,陰影會向四周擴充套件。若值為負數,陰影會收縮,小於元素尺寸。預設值0會保持陰影和元素尺寸一致。

box-shadow: 0px0px0px10px;

詳解box-shadow

在這裡面我們能看到,當我們spread為10px,margin也為10px他倆是重合的,說明spread為正值,在原來的大小上(上下左右)+spread的值。當spread為為負值,再遠的大小上– spread的值

4。color

color表示陰影的顏色。可以是任何顏色單位。這個沒什麼說的。

5。position

position表示陰影的位置,可選項。預設為外部陰影。可以透過使用inset關鍵字來製作內部陰影。外部陰影不用宣告預設就是,想使用內部陰影需要宣告inset在最前面最後都可以。

Likethis:

box-shadow: inset0px0px0px10px#0ff;

效果:

詳解box-shadow

很明顯陰影是在裡面的。

接下來我們也對內陰影分析一下spread以及blurradius 。

透過上面的圖我們能看出來。

對於spread當值為正值時,可以看出內陰影從邊界開始填充。至於這個邊界是從border開始,還是從padding開始呢?

CSS:

border:10pxsolid#f0f;

padding:10px;

box-shadow: inset0px0px0px10px#0ff;

我們可以看出來

以Padding區域為起點進行向內部擴充套件陰影。擴充套件半徑為spread的值,負值沒有意義,沒有padding區域以content區域開始。

對於blurradius和spread類似這裡就不演示了,給大家總結一下,模糊半徑的值還是blurradius/2 開始位置同spread,有padding先從padding開始,沒有從content開始。

下面說一說box-shadow的層次(z-index)

對於

外陰影(預設情況):

詳解box-shadow

對於外陰影:高與magin低於background。

對於內陰影:高與padding低於content。

Box-shadow不僅可以區分內外陰影還可以,應用多個陰影進行疊加。

每個陰影用‘,’隔開,likethis

CSS:

width:100px;

height:100px;

background:#fcc;

padding:10px;

border-radius:50%;

box-shadow:120px0px0-10px#f0f,

95px10px00px#d00,

30px20px0-10px#cdd,

90px-10px00px#add,

40px-30px00px#edd;

結果:

詳解box-shadow

層次也是後寫的在後邊。因為可以重疊所以我們可以寫多邊框的一個元素

詳解box-shadow

這樣的一個準靶。(這個也就是剛開始出現的那張圖片的原因)。

標簽: 陰影  shadow  box  spread  10px