CSS陰影: 偏移、模糊半徑、擴散半徑

想要更好的閱讀體驗,可以轉我的個人博客

box-shadow 概述

先從整體來說說 box-shadow 屬性 。

box-shadow 支持定義多個陰影,他們應該使用逗號分割:

box-shadow: 3px 3px red, -1em 0 0.4em olive;

這裏定義了兩個陰影,分別是 3px 3px red-1em 0 0.4em olive

其中,每個陰影支持最多6個字段:

  • inset

    可選的字段,默認不指定。

    指定inset,陰影向內擴散,否則陰影向外擴散。

  • offset-x 和 offset-y

    用來設置陰影偏移量,分爲 x方向 和 y方向。聲明的時候,x方向 在前,y方向 在後。

    這個定義的順序是有講究的,CSS 的偏移採用的是我們平時定義座標軸的習慣,按照 (x,y) 的順序,這個規則不僅僅適用於我們今天的主角 box-shadow ,而且基本上和"位移"、"偏移"有關的屬性都適用。

    如果兩者都是0,那麼陰影不做偏移,位於元素正後方。

  • blur-radius

    一般情況下,陰影是純色的,沒有漸變區域。

    但是如果設置了模糊半徑,就會創建一個漸變區域,向周圍的顏色過渡。

    漸變半徑必須大於0。

  • spread-radius

    擴散半徑是對原來的純色陰影的縮放。

    默認取值爲0,代表陰影和物體一樣大,但因爲陰影在物體後面,所以你看不見。當然加上一層模糊半徑你就能看到了。

    小於0的時候,陰影會縮小。這種情況下往往你也看不到,需要設置一層很厚的模糊半徑,然後慢慢調低擴散半徑你才能看出區別。

    大於0的時候,陰影會擴大。

  • color

    陰影的顏色,這就不用解釋了。

box-shadow 很簡單,但是對於新手來說,在面對模糊半徑和擴散半徑可能會有點困惑,接下來,我們將結合例子,更加深入探討這兩者的區別。

準備: 定義一個球

因爲方形的不太適合我們的講解,我們先定義一個圓形的球:

.ball {
  height: 100px;
  width: 100px;
  border-radius: 50% 50%;
  margin: 50px;
  display: inline-block;
}

外加一些陰影:

.b1 {
  box-shadow: 0px 0px 20px #888;
}

.b2 {
  box-shadow: 0px 0px 20px 10px #888;
}

.b3 {
  box-shadow: 0px 0px 0px 10px #888;
}

.b4 {
  box-shadow: 0px 0px 20px -10px #888;
}

.b5 {
  box-shadow: inset 0px 0px 20px #888;
}

.b6 {
  box-shadow: inset 0px 0px 20px 10px #888;
}

.b7 {
  box-shadow: inset 0px 0px 0px 10px #888;
}

.b8 {
  box-shadow: inset 0px 0px 20px -10px #888;
}

只有模糊半徑

我們先定義一個沒有擴散半徑的球:

<!-- box-shadow: 0px 0px 20px #888 -->
<div class="ball b1"></div>

在這裏插入圖片描述

可以看到,球的周圍有一圈陰影,因爲我們沒有設置擴散半徑,所以我們看到的這層陰影應該是全部的模糊半徑。

我們還可以嘗試使用一下內陰影:

<!-- box-shadow: inset 0px 0px 20px #888 -->
<div class="ball b5"></div>

在這裏插入圖片描述

模糊半徑+擴散半徑(取正)

接下來我們嘗試使用在原來的基礎上添加一個擴散半徑:

<!-- box-shadow: 0px 0px 20px 10px #888 -->
<div class="ball b2"></div>
<!-- box-shadow: inset 0px 0px 20px 10px #888 -->
<div class="ball b6"></div>

在這裏插入圖片描述

第一感覺應該是陰影增厚了,再仔細看,我們會發現,增厚的部分的陰影都很濃,也就是說,我們增厚的部分是純色的陰影,而不是經過了模糊的漸變陰影,這就是所謂的擴散半徑。

只有擴散半徑

我們可以把模糊半徑去掉,看看差別:

<!-- box-shadow: 0px 0px 0px 10px #888 -->
<div class="ball b3"></div>
<!-- box-shadow: inset 0px 0px 0px 10px #888 -->
<div class="ball b7"></div>

在這裏插入圖片描述

看到了嗎?陰影是純色的,沒有漸變。

總結下來,模糊半徑就是漸變陰影半徑,而擴散半徑就是純色陰影半徑。並且,漸變陰影包在擴散陰影外面。

模糊半徑+擴散半徑(取負)

最後再看一個例子,是擴散半徑爲負數的時候:

<!-- box-shadow: 0px 0px 20px -10px #888 -->
<div class="ball b4"></div>
<!-- box-shadow: inset 0px 0px 20px -10px #888 -->
<div class="ball b8"></div>

擴散半徑爲負數,就是把裏面的那層純色的半徑減少了,也就是說,我們目前看到的是模糊半徑的一小部分。

大部分卡片UI的設計就是這種,你們可能很熟悉了,也是我個人覺得最好看的陰影。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章