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

関連記事

2022.05.16

HTML・CSS

メディアクエリのand条件とor条件

CSSのメディアクエリ(Media Queries)のand条件は以下のように記述します。andでつないだ全ての条件を満たす時に適用されます。 or条件は以下の…

2024.06.14

HTML・CSS

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

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

2025.08.05

HTML・CSS

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

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

2024.09.13

HTML・CSS

疑似クラス:has()を利用した余白と色の調整

疑似クラスの:has()を利用して、liタグの余白と色を調整をします。デモページはこちら 共通のCSSは以下になります。通常時はulタグにgap: 60pxを指…

2022.08.28

HTML・CSS

親要素にtransformが設定されている場合のposition: fixed;

通常、position: fixed;でtop: 0;left: 0;の場合、画面の左上が基準位置になります。しかし、親要素(先祖を含む)にtransformが…

上に戻る