最近開始研究css的各類奇妙的用法,勵志作一個能用css寫出奇幻動畫效果的程序媛。css
drop-shadow和box-shadow類似,都是實現投影效果,box-shadow的使用更加常見一些,那麼這兩種陰影的實現有什麼差別呢?html
先具體說說drop-shadow的用法。css3
filter: drop-shadow(20px 10px 4px #4444dd)
瀏覽器
語法:bash
drop-shadow(offset-x offset-y blur-radius spread-radius color)
wordpress
參數:學習
offset-x
offset-y
(必須):x偏移和y偏移動畫
blur-radius
(可選):模糊大小,默認爲0spa
spread-radius
(可選):可是大多數瀏覽器不支持這個參數3d
color
(可選):色值
能夠看到和box-shadow的參數相似,可是不一樣的是drop-shadow沒有inset內陰影,不能陰影疊加。
drop-shadow是CSS3中filter的陰影濾鏡。相較於box-shadow而言,他更像真實世界的投影,非透明的顏色下,有投影;透明的部分,光線穿過,無投影。
如下咱們從幾個方面來比較如下二者的區別
<!DOCTYPE html>
<html>
<head>
<title>效果展現</title>
<style>
.box {
margin: 40px; padding: 50px;
width: 300px;
background-color: #fff;
position: relative;
font-size: 24px;
}
.cor {
position: absolute;
left: -40px;
width: 0;
height: 0;
overflow: hidden;
border: 20px solid transparent;
border-right-color: #fff;
}
.drop-shadow {
filter: drop-shadow(5px 5px 10px black);
}
.box-shadow{
box-shadow: 5px 5px 10px black;
}
</style>
</head>
<body>
<div class="box drop-shadow">
<i class="cor"></i>
filter: drop-shadow
</div>
<div class="box box-shadow">
<i class="cor"></i>
box-shadow
</div>
</body>
</html>
複製代碼
上圖可看到box-shadow的陰影距離更小,色值要更深。
box-shadow有個很厲害的地方,就是陰影能夠任意疊加,所以能夠做出不少不一樣效果的圖片,好比:
<!DOCTYPE html>
<html>
<head>
<style>
div{
width:100px;
height:100px;
margin:50px auto;
background:deeppink;
border-radius:50%;
box-shadow:
120px 0px 0 -10px #795548,
95px 20px 0 0px #607D8B,
30px 30px 0 -10px green,
90px -20px 0 0px #FFC107,
40px -40px 0 0px #2196F3;
}
</style>
</head>
<body>
<div></div>
</body>
</html>
複製代碼
<!DOCTYPE html>
<html>
<head>
<style>
div {
position: absolute;
top: 50%;
left: 50%;
width: 200px;
height: 200px;
transform: translate(-50%, -50%);
border-radius: 50%;
background-image: radial-gradient(#fff 38%, transparent 38%), radial-gradient(#09C 0, #09C 100%)
}
div:before {
content: "";
width: 285px;
height: 122px;
background: 0 0;
border-radius: 100%;
position: absolute;
top: 33px;
left: -45px;
margin: auto;
box-shadow: inset 0 12px 0 13px #09c, -35px -8px 0 -5px #fff;
transform: rotate(-35deg)
}
div:after {
content: "";
width: 120px;
height: 25px;
background: #09c;
position: absolute;
top: 80px;
left: 0;
right: 0;
margin: auto;
box-shadow: 50px 23px 0 -2px #fff
}
</style>
</head>
<body>
<div></div>
</body>
</html>
複製代碼
雖然drop-shadow不能陰影疊加,可是它有一個很厲害的特性,就是它纔是真正意義上的投影!而box-shadow只是盒陰影而已。
下面有個更加直觀的例子
<!DOCTYPE html>
<html>
<head>
<style>
div {
border: 10px dashed #beceeb;
width: 100px;
height: 100px;
margin: 50px;
}
.box-shadow {
box-shadow: 5px 5px 10px black;
}
.drop-shadow {
filter: drop-shadow(5px 5px 10px black);
}
</style>
</head>
<body>
<div class="box-shadow"></div>
<div class="drop-shadow"></div>
</body>
</html>
複製代碼
看到這就明白了吧? drop-shadow不只能夠穿透代碼構建的元素的透明部分,還能夠穿透png圖片的透明部分哦!
此文章參考張鑫旭大神、MDN docs等資料寫成。此文章僅供本人學習記錄用。
張鑫旭:CSS3 filter:drop-shadow濾鏡與box-shadow區別應用
MDN:drop-shadow