2024.09.02

HTML・CSS

box-shadowとfilter: drop-shadowの違い

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));
}

関連記事

2020.12.28

HTML・CSS

CSSロードアニメーションの実装【円の一部分の色を回転】

デモページはこちら 円の一部分の色が回転する動作のCSSロードアニメーションを実装します。ローダーの見た目は全てCSSで実装するため、svgは使用しません。 h…

2024.09.10

HTML・CSS

backdrop-filter: blurとfilter: blurの違い

backdrop-filterプロパティのblurとfilterプロパティのblurを比較して違いを確認します。デモページはこちら 共通のCSSは以下になります…

2021.01.30

HTML・CSS

CSS疑似要素のcontentプロパティにcounter関数で連番を指定

デモページはこちら CSS疑似要素のcontentプロパティに、CSSのcounter関数で連番を指定します。JavaScriptは使用せず、CSSのみで実装し…

2021.09.12

HTML・CSS

90°回転させた要素をブロック要素内に収めるtransform-originの設定

左上に配置した長方形の要素を90°回転させた時に、親のブロック要素内に収めるtransform-originの設定です。デモページはこちら htmlは以下のよう…

2025.08.05

HTML・CSS

border-imageを利用したグラデーションのボーダー

CSSのborder-imageプロパティを利用して、グラデーションのボーダーを作成します。デモページはこちら border-imageはborder-imag…

上に戻る