1. 程式人生 > >邊框陰影:box-shadow屬性

邊框陰影:box-shadow屬性

今天在寫一個點亮燈泡的小專案的時候,用到了box-shadow屬性。感覺這個屬性挺有意思的,索性專門整理一下。

一. box-shadow的定義和語法

定義:box-shadow是css3新增的一個屬性。在W3School裡,定義box-shadow是向框新增一個或者多個陰影的屬性。 語法:box-shadow: h-shadow v-shadow blur spread color inset.  h-shadow: 陰影的水平位置 v-shadow:陰影的垂直位置 blur:陰影的模糊半徑 spread:陰影的半徑 color:陰影的顏色 inset:將外部陰影改成內部陰影【outset反過來】 根據box-shadow的定義,我們可以為一個框設定一個陰影,也可以設定多個陰影。

當我們需要設定多個陰影時,中間需要將每個陰影用逗號隔開。

舉個例子:

/*html程式碼*/ 
<div class="test"></div>

/*對應的css程式碼*/ 
.test{ 
  width: 100px; 
  height: 100px; 
  background: yellow; 
  margin: 100px auto; 
  border-radius: 50%; 
  box-shadow: 10px 10px 20px 10px rgba(255,255,0,0.5), -10px 10px 10px 10px rgba(255,255,255,0.5) 
} 

這裡我們用border-radius屬性設定了一個圓形,並且為這個圓形添加了一個淺黃色陰影和一個白色的陰影。

以第一個陰影:box-shadow: 10px 10px 20px 10px rgba(255,255,0,0.5)為例:

這段程式碼表示陰影的水平位置為右移10px;

垂直位置為下移10px;

第三個10px代表陰影的模糊程度blur,我們也將它設定成20px;

第四個10px是陰影半徑的意思;最後一個規定了陰影的顏色為rgba(255,255,0,0.5)。

也就是說,我們為class為test的div元素添加了一個偏離框,並且向右距離為10px、向下距離為10px、模糊半徑為10px、陰影半徑為10px的淺黃色的陰影。

根據上面的CSS程式碼,我們看一下同時設定了兩個陰影的效果:

為了更直白地觀察到上述陰影設定的效果,我們將第二個陰影刪除,只保留第一個陰影:

效果是不是還不錯?

二. box-shadow屬性值的詳細解析

根據前面的語法規則,box-shadow可以有六個值。接下來我們來聊一聊box-shadow屬性裡的每個值都怎麼用

1. h-shadow【必需】

這個值代表的是陰影在x軸上的陰影位置。可以是負值。

當它為正值的時候表示向右位移一定的距離【出現在元素的右邊】,負值表示向左位移【出現在元素的左邊】。這個距離的單位可以是px、em或者rem;

需要注意的是:h-shadow是必需的,不能省略!

box-shadow: 10px 0px 10px rgba(0,0,0,0.9) /*陰影出現在元素的右側*/

box-shadow: -10px 0px 10px rgba(0,0,0,0.9) /*陰影出現在元素的左側*/

2. v-shadow【必需】

這個值表示陰影在y軸上的位置。也可以是負值。

當值為負的時候表示向上偏移一定的距離【出現在元素的上方】;值為正的時候表示向下偏移一定的距離【出現的元素的下方】

box-shadow: 0px -20px 10px rgba(0,0,0,0.9)/*陰影出現在元素上方*/ 

box-shadow: 0px 20px 10px rgba(0,0,0,0.9)/*陰影出現在元素下方*/

3. blur【可選】

blur指的是陰影的模糊半徑。這個值使得陰影部分的過渡看起來更柔和。我們可以試一試不同blur值對陰影效果的影響:

box-shadow: 10px 10px 5px rgba(0,0,0,0.9) /*blur值為5px*/ 

box-shadow: 10px 10px 10px rgba(0,0,0,0.9)/*blur值為10px*/

box-shadow: 10px 10px 15px rgba(0,0,0,0.9)/*blur值為15px*/ 

將blur值為5px、10px、15px 的效果圖依次從左往右排列,可以看出來隨著模糊半徑數值的增大,陰影的模糊程度越高。

4. spread【可選】

spread表示的是陰影的半徑。我在網上看到有人對spread和blur的區別發出疑問,其實很簡單:blur用於描述模糊半徑,它的值決定了陰影的模糊程度;而spread是表示陰影所佔區域的大小,這是兩個不同的概念。

我們來試試其他屬性值相同的情況下,spread不同時陰影的表現:

box-shadow: 10px 10px 10px 5px rgba(0,0,0,0.9);/*陰影半徑為5px*/ 
box-shadow: 10px 10px 10px 15px rgba(0,0,0,0.9);/*陰影半徑為15px*/ 
box-shadow: 10px 10px 10px 25px rgba(0,0,0,0.9);/*陰影半徑為25px*/ 

將spread的值為5px、15px、25px的效果圖依次 從左向右排列,很明顯陰影在逐漸變大

5. color【可選】

陰影的顏色可以用任何顏色單位來表示。當我們沒有設定color值的時候,預設就是黑色。

box-shadow: 10px 10px 10px 5px rgba(0,0,0,0.9);/*黑色陰影,用rgba表示,透明度為0.9*/ 

box-shadow: 10px 10px 10px 5px rgb(255,0,0);/*紅色陰影,用rgb表示*/ 

box-shadow: 10px 10px 10px 5px #afe;/*淺藍色陰影,用十六進位制顏色表示法*/ 

box-shadow: 10px 10px 10px 5px blue;/*藍色陰影,用顏色單詞表示*/

6. inset 【可選】

預設情況下,我們設定的陰影都是外部陰影,而這個屬性值的作用是將外部陰影轉換成內部陰影。

box-shadow: 10px 10px 10px 5px blue; /*預設為外部陰影*/ 

box-shadow: 10px 10px 10px 5px blue inset;/*將外部陰影切換為內部陰影*/

7. 一些有趣的實踐

瞭解了box-shadow之後,我們可以用來做一些有趣的事情。比如給陰影新增動畫,對元素新增:hover偽元素,形成滑鼠懸浮在元素上時,陰影擴大的效果

.test{ 
  width: 100px; 
  height: 100px; 
  background: yellow; 
  margin: 100px auto; 
  border-radius: 50%; 
  box-shadow: 0px 0px 10px 5px rgba(0,0,0,0.9); 
  transform: scale(1); 
  transition: box-shadow 0.6s, transform 0.5s; 
}

.test:hover{
	width: 100px;
	height: 100px;
	background: yellow;
	margin: 100px auto;
	border-radius: 50%;
	box-shadow: 0px 0px 50px 15px rgba(0,0,0,0.9);
	transition: box-shadow 0.5s;
}

怎麼樣,box-shadow屬性是不是挺有意思的?

好了,今天關於邊框陰影box-shadow 屬性的總結就寫到這裡了。鑑於剛剛做上面這個滑鼠懸浮效果的時候用到了CSS3的另外兩個新屬性transition和transform,我打算下次來寫一些這兩個屬性。

OVER!