box-shadowプロパティとfilterプロパティのdrop-shadowを比較して違いを確認します。
デモページはこちら
filter: drop-shadowはbox-shadowと違い、広がりの距離とinset(内側の影)は指定できません。これはtext-shadowと同じ仕様です。
box-shadow: 水平方向の距離 垂直方向の距離 ぼかしの距離 広がりの距離 影の色 inset;
filter: drop-shadow(水平方向の距離 垂直方向の距離 ぼかしの距離 影の色);
text-shadow: 水平方向の距離 垂直方向の距離 ぼかしの距離 影の色;
まず、ぼかしのないドロップシャドウです。
この場合、box-shadowとfilter: drop-shadowに違いはありません。
//ぼかしのない右下方向へのドロップシャドウ
.style01 {
box-shadow: 3px 3px 0 0 rgba(0, 0, 0, 0.6);
}
.style02 {
filter: drop-shadow(3px 3px 0 rgba(0, 0, 0, 0.6));
}
次に、ぼかしのある下方向と右下方向のドロップシャドウです。
どちらもfilter: drop-shadowの影が強くぼやけているのがわかります。そして強くぼやけている分、影は薄くなります。
//下方向へのドロップシャドウ
.style03 {
box-shadow: 0 3px 7px 0 rgba(0, 0, 0, 0.6);
}
.style04 {
filter: drop-shadow(0 3px 7px rgba(0, 0, 0, 0.6));
}
//右下方向へのドロップシャドウ
.style05 {
box-shadow: 3px 3px 7px 0 rgba(0, 0, 0, 0.6);
}
.style06 {
filter: drop-shadow(3px 3px 7px rgba(0, 0, 0, 0.6));
}
次に、背景色がない場合のドロップシャドウです。
filter: drop-shadowは要素の実際に見えている領域に影を付ける特性があります。そのためテキスト部分に影が付きます。
//背景色がない場合のドロップシャドウ
.style07 {
background-color: transparent;
box-shadow: 3px 3px 7px 0 rgba(0, 0, 0, 0.6);
}
.style08 {
background-color: transparent;
filter: drop-shadow(3px 3px 7px rgba(0, 0, 0, 0.6));
}
次に、疑似要素がある場合のドロップシャドウです。
疑似要素の親要素にbox-shadowとfilter: drop-shadowを指定します。box-shadowは疑似要素部分に影が付きませんが、filter: drop-shadowは影が付きます。
//疑似要素がある場合のドロップシャドウ
.style09 {
box-shadow: 3px 3px 7px 0 rgba(0, 0, 0, 0.6);
}
.style09::before {
content: "";
position: absolute;
top: 100%;
left: 50%;
transform: translateX(-50%);
border: 15px solid transparent;
border-top: 15px solid #fff;
}
.style10 {
filter: drop-shadow(3px 3px 7px rgba(0, 0, 0, 0.6));
}
.style10::before {
content: "";
position: absolute;
top: 100%;
left: 50%;
transform: translateX(-50%);
border: 15px solid transparent;
border-top: 15px solid #fff;
}
最後に、透過pngのドロップシャドウです。
box-shadowは画像の輪郭部分に影が付きますが、filter: drop-shadowは透過部分を考慮した影になります。これはsvgでも同じ結果になります。
//透過pngのドロップシャドウ
.style11 img {
box-shadow: 3px 3px 7px 0 rgba(0, 0, 0, 0.6);
}
.style12 img {
filter: drop-shadow(3px 3px 7px rgba(0, 0, 0, 0.6));
}





