【CSS】filter: drop-shadow()で透過画像に影をつける方法|box-shadowとの違い・実務パターン集

【CSS】filter:drop-shadowで透過したロゴ画像等にいい感じの影をつける HTML/CSS

CSSの filter: drop-shadow() を使って、透過PNG・SVG画像に「画像の形に沿った影」をつける方法を解説します。

box-shadow との違いから、パラメータの詳細透過ロゴ・アイコンへの適用複数の影を重ねるテクニックホバーアニメーションパフォーマンスの注意点実務で使えるパターン集まで、網羅的に解説します。

スポンサーリンク
  1. filter: drop-shadow() の基本構文
  2. box-shadow との違い(最重要ポイント)
    1. 影が付く範囲の違い
    2. 透過画像での挙動の違い(コード比較)
    3. 使い分けの判断基準
  3. 透過PNG・SVGロゴに影をつける
    1. 透過PNGロゴの例
    2. SVGアイコンの例
    3. 背景画像の上にロゴを載せるケース
  4. パラメータの詳細と調整テクニック
    1. offset-x / offset-y(ずらし量)
    2. blur-radius(ぼかし半径)
    3. color(影の色)
  5. 複数の影を重ねる方法
    1. filter関数の連結
    2. box-shadow との比較(複数の影)
  6. ホバー時のアニメーション効果
    1. 基本的なホバーアニメーション
    2. 浮き上がり効果との組み合わせ
    3. ネオングロー・アニメーション
    4. @keyframes で点滅するグロー
  7. テキストへの影(filter vs text-shadow)
    1. text-shadow との違い
  8. 他の filter 関数との組み合わせ
    1. brightness() + drop-shadow()
    2. grayscale() + drop-shadow()
    3. hue-rotate() + drop-shadow()
  9. clip-path で切り抜いた要素への影
  10. 実務パターン集
    1. パターン1:ヘッダーロゴの視認性向上
    2. パターン2:SNSアイコンのホバー効果
    3. パターン3:パートナーロゴ一覧
    4. パターン4:装飾的なアイコンボタン
    5. パターン5:CSS三角形(border trick)への影
  11. パフォーマンスの注意点
    1. なぜ重くなるのか
    2. パフォーマンス最適化のポイント
    3. パフォーマンスガイドライン
  12. ブラウザ互換性
    1. フォールバック(IE11対応が必要な場合)
  13. よくある問題と対処法
    1. 問題1:影が二重に見える
    2. 問題2:背景色がある要素で矩形の影になる
    3. 問題3:transition がカクつく
    4. 問題4:position: fixed / sticky の子要素への影響
    5. 問題5:Retinaディスプレイで影がぼやけすぎる
  14. まとめ

filter: drop-shadow() の基本構文

filter: drop-shadow() は、要素の不透明な部分の形状に沿って影を落とすCSSフィルターです。

CSS – 基本構文
filter: drop-shadow(offset-x offset-y blur-radius color);
パラメータ 説明 省略
offset-x 水平方向のずらし量。正の値で右、負の値で左に影が移動 不可
offset-y 垂直方向のずらし量。正の値で下、負の値で上に影が移動 不可
blur-radius ぼかしの半径。値が大きいほど影がぼやける。0 でくっきりした影 可(初期値 0)
color 影の色。省略時はブラウザ依存(通常は黒)

注意:box-shadow にある spread-radius(広がり)や inset(内側の影)は、drop-shadow() では使用できません。

CSS – 基本的な使い方
/* 右下に軽い影 */
.logo {
  filter: drop-shadow(2px 2px 4px rgba(0, 0, 0, 0.3));
}

/* 下方向にふわっとした影 */
.icon {
  filter: drop-shadow(0 4px 6px rgba(0, 0, 0, 0.2));
}

/* ぼかしなしのくっきりした影 */
.sharp {
  filter: drop-shadow(3px 3px 0 #333);
}

box-shadow との違い(最重要ポイント)

drop-shadow()box-shadow は、どちらも影をつけるプロパティですが、影の付き方がまったく異なります

影が付く範囲の違い

項目 box-shadow filter: drop-shadow()
影の基準 要素のボックス(矩形)の外周 要素の不透明ピクセルの輪郭
透過画像 四角い影になる 画像の形に沿った影になる
spread(広がり) 指定可能 指定不可
inset(内側の影) 指定可能 指定不可
border-radius 角丸に沿う 角丸に沿う(形状全体に沿う)
複数の影 カンマ区切り filter関数を連結
パフォーマンス 軽い やや重い(GPU処理)

透過画像での挙動の違い(コード比較)

白い背景に透過PNGのロゴを置いた場合の比較です。

HTML
<img src="logo.png" class="shadow-box">
<img src="logo.png" class="shadow-drop">
CSS – box-shadow vs drop-shadow
/* box-shadow:画像の「矩形」に影がつく */
.shadow-box {
  box-shadow: 4px 4px 8px rgba(0, 0, 0, 0.3);
}

/* drop-shadow:画像の「形状」に影がつく */
.shadow-drop {
  filter: drop-shadow(4px 4px 8px rgba(0, 0, 0, 0.3));
}

結果の違い

  • box-shadow は透過部分に関係なく、画像要素の四角い枠に沿って影がつく
  • drop-shadow() は透過部分を無視し、実際に色がついている部分の輪郭に沿って影がつく
  • 透過PNG・SVGでは drop-shadow() のほうが圧倒的に自然な見た目になる

使い分けの判断基準

シーン 推奨 理由
通常のカード・ボタン box-shadow 軽量で spread/inset も使える
透過PNG/SVGの画像 drop-shadow() 形に沿った影が必要
clip-path を使った要素 drop-shadow() 切り抜き後の形状に影がつく
角丸ボックス box-shadow border-radius に沿う+軽い
三角形(border trick) drop-shadow() 三角形の形状に影がつく

透過PNG・SVGロゴに影をつける

drop-shadow() がもっとも威力を発揮するのが、透過画像への影付けです。背景と同化しやすいロゴやアイコンに影をつけることで、視認性を大きく改善できます。

透過PNGロゴの例

CSS – 透過PNGへの影付け
/* 白いロゴを背景から浮かせる */
.logo-white {
  filter: drop-shadow(0 2px 4px rgba(0, 0, 0, 0.3));
}

/* 暗い背景上のロゴに光彩を入れる */
.logo-glow {
  filter: drop-shadow(0 0 8px rgba(255, 255, 255, 0.6));
}

/* カラーロゴの立体感を出す */
.logo-3d {
  filter: drop-shadow(2px 4px 6px rgba(0, 0, 0, 0.25));
}

SVGアイコンの例

SVGはベクター形式で透過情報を持つため、drop-shadow() との相性が抜群です。

CSS – SVGアイコンへの影付け
/* SVGアイコンに軽い影 */
.icon-svg {
  width: 48px;
  height: 48px;
  filter: drop-shadow(1px 2px 3px rgba(0, 0, 0, 0.2));
}

/* インラインSVGにも適用可能 */
svg.icon {
  filter: drop-shadow(0 2px 4px rgba(0, 0, 0, 0.15));
}

/* currentColorを使うSVGに色付き影 */
.icon-colored {
  color: #2563eb;
  filter: drop-shadow(0 2px 4px rgba(37, 99, 235, 0.3));
}

背景画像の上にロゴを載せるケース

背景画像が変わってもロゴが常に視認できるようにするテクニックです。

CSS – 背景画像上のロゴ
.hero {
  position: relative;
  background: url('hero-bg.jpg') center / cover;
}

.hero .logo {
  /* 明るい背景でも暗い背景でも視認性を確保 */
  filter: drop-shadow(0 2px 8px rgba(0, 0, 0, 0.5))
         drop-shadow(0 0 20px rgba(0, 0, 0, 0.3));
}

ポイント:背景画像が差し替わる可能性がある場合、drop-shadow() を使っておくと、明暗どちらの背景でもロゴの視認性を確保できます。画像自体を編集する必要がないため、素早く対応できます。

パラメータの詳細と調整テクニック

drop-shadow() の各パラメータを調整して、さまざまな影の表現を実現する方法を解説します。

offset-x / offset-y(ずらし量)

影の方向と距離を決定するパラメータです。

CSS – オフセットのバリエーション
/* 真下に影(もっとも自然な見た目) */
filter: drop-shadow(0 4px 6px rgba(0,0,0,0.2));

/* 右下に影(古典的なドロップシャドウ) */
filter: drop-shadow(4px 4px 6px rgba(0,0,0,0.2));

/* 全方向に均一な影(光彩効果) */
filter: drop-shadow(0 0 8px rgba(0,0,0,0.3));

/* 左上に影(光源が右下にある表現) */
filter: drop-shadow(-3px -3px 6px rgba(0,0,0,0.2));

blur-radius(ぼかし半径)

影のぼかし具合を制御します。値が大きいほどソフトな影になります。

blur 値 効果 用途
0 くっきりした影(ぼかしなし) レトロ風、ステッカー風
1px - 3px わずかにぼけた影 テキスト影、小さなアイコン
4px - 8px 自然なソフトシャドウ ロゴ、カード(もっとも汎用的)
10px - 20px 大きくぼやけた影 光彩効果、ヒーロー画像
20px 以上 非常にぼやけた広い影 グロー効果、ネオン風

color(影の色)

影の色を工夫するだけで、まったく異なる印象を作れます。

CSS – 色のバリエーション
/* 標準的な黒い影(汎用) */
filter: drop-shadow(0 2px 4px rgba(0, 0, 0, 0.25));

/* ブランドカラーの影(統一感) */
filter: drop-shadow(0 4px 8px rgba(37, 99, 235, 0.4));

/* 白い影(ダークモード用) */
filter: drop-shadow(0 0 10px rgba(255, 255, 255, 0.5));

/* カラフルなネオン影 */
filter: drop-shadow(0 0 15px #ff006e);

ポイント:影の色にブランドカラーを使うと、デザインの統一感が高まります。rgba() で透明度を調整し、強すぎない自然な影にするのがコツです。

複数の影を重ねる方法

drop-shadow() を複数使うことで、よりリッチな影の表現が可能です。

filter関数の連結

box-shadow と異なり、drop-shadow()カンマ区切りではなく filter 関数の連結(スペース区切り)で複数指定します。

CSS – 複数の影を重ねる
/* リアルな立体感(近い影 + 遠い影) */
.logo-realistic {
  filter: drop-shadow(0 1px 2px rgba(0,0,0,0.3))
         drop-shadow(0 4px 8px rgba(0,0,0,0.15));
}

/* ネオングロー効果 */
.logo-neon {
  filter: drop-shadow(0 0 5px #00ffff)
         drop-shadow(0 0 15px #00ffff)
         drop-shadow(0 0 30px #00ffff);
}

/* マテリアルデザイン風の影 */
.logo-material {
  filter: drop-shadow(0 1px 3px rgba(0,0,0,0.12))
         drop-shadow(0 1px 2px rgba(0,0,0,0.24));
}

注意:複数の drop-shadow() を重ねると、後のフィルターが前のフィルターの結果(影を含む)に対して適用されるため、影が二重三重に重なり、意図より濃くなることがあります。影の色の透明度を低めに設定するのがポイントです。

box-shadow との比較(複数の影)

CSS – box-shadow はカンマ区切り
/* box-shadow:カンマで区切る(影同士は独立) */
box-shadow:
  0 1px 2px rgba(0,0,0,0.3),
  0 4px 8px rgba(0,0,0,0.15);

/* drop-shadow:スペースで区切る(前の影の結果に適用される) */
filter:
  drop-shadow(0 1px 2px rgba(0,0,0,0.3))
  drop-shadow(0 4px 8px rgba(0,0,0,0.15));

ホバー時のアニメーション効果

filter プロパティは transition でアニメーション可能なため、ホバー時の影の変化をスムーズに表現できます。

基本的なホバーアニメーション

CSS – ホバーで影を強調
.logo-hover {
  filter: drop-shadow(0 2px 4px rgba(0,0,0,0.2));
  transition: filter 0.3s ease;
}

.logo-hover:hover {
  filter: drop-shadow(0 6px 12px rgba(0,0,0,0.35));
}

浮き上がり効果との組み合わせ

transform: translateY() と組み合わせることで、要素が浮き上がるような表現が可能です。

CSS – 浮き上がり + 影の強調
.card-lift {
  filter: drop-shadow(0 2px 4px rgba(0,0,0,0.15));
  transition: filter 0.3s ease, transform 0.3s ease;
}

.card-lift:hover {
  filter: drop-shadow(0 8px 20px rgba(0,0,0,0.25));
  transform: translateY(-4px);
}

ネオングロー・アニメーション

CSS – ホバーでネオン発光
.icon-neon {
  filter: drop-shadow(0 0 2px #3b82f6);
  transition: filter 0.4s ease;
}

.icon-neon:hover {
  filter: drop-shadow(0 0 8px #3b82f6)
         drop-shadow(0 0 20px #3b82f6);
}

@keyframes で点滅するグロー

CSS – 脈動するグロー効果
@keyframes pulse-glow {
  0%, 100% {
    filter: drop-shadow(0 0 5px rgba(59,130,246,0.5));
  }
  50% {
    filter: drop-shadow(0 0 20px rgba(59,130,246,0.8))
           drop-shadow(0 0 40px rgba(59,130,246,0.4));
  }
}

.icon-pulse {
  animation: pulse-glow 2s ease-in-out infinite;
}

テキストへの影(filter vs text-shadow)

テキストにも drop-shadow() を使えますが、text-shadow との使い分けが重要です。

text-shadow との違い

項目 text-shadow filter: drop-shadow()
対象 テキストのみ 要素全体(テキスト+背景+ボーダー等)
疑似要素 ::before/::after のテキストにも個別適用可 親要素ごと影がつく
パフォーマンス 軽い やや重い
推奨シーン 純粋なテキストの影 装飾付き要素全体の影
CSS – テキストの影:使い分け
/* テキストだけに影をつけるなら text-shadow */
.heading {
  text-shadow: 2px 2px 4px rgba(0,0,0,0.3);
}

/* テキスト+装飾ごと影をつけるなら drop-shadow */
.badge {
  background: #3b82f6;
  color: #fff;
  padding: 4px 12px;
  border-radius: 999px;
  filter: drop-shadow(0 2px 4px rgba(59,130,246,0.4));
}

他の filter 関数との組み合わせ

filter プロパティには drop-shadow() 以外にもさまざまな関数があり、組み合わせることでリッチなビジュアル表現が可能です。

brightness() + drop-shadow()

CSS – 明るさ調整 + 影
/* ホバーで明るくしながら影を強調 */
.icon-bright {
  filter: brightness(1) drop-shadow(0 2px 4px rgba(0,0,0,0.2));
  transition: filter 0.3s ease;
}

.icon-bright:hover {
  filter: brightness(1.2) drop-shadow(0 4px 12px rgba(0,0,0,0.3));
}

grayscale() + drop-shadow()

CSS – グレースケール + 影(非活性→活性の表現)
/* 非活性状態:グレー+影なし */
.partner-logo {
  filter: grayscale(1) opacity(0.6);
  transition: filter 0.4s ease;
}

/* ホバーで色付き + 影 */
.partner-logo:hover {
  filter: grayscale(0) opacity(1) drop-shadow(0 4px 8px rgba(0,0,0,0.2));
}

hue-rotate() + drop-shadow()

CSS – 色相回転 + 影
/* ホバーで色を変えながら影もつける */
.icon-hue {
  filter: drop-shadow(0 2px 4px rgba(0,0,0,0.2));
  transition: filter 0.5s ease;
}

.icon-hue:hover {
  filter: hue-rotate(90deg)
         drop-shadow(0 4px 12px rgba(0,0,0,0.3));
}

clip-path で切り抜いた要素への影

clip-path で切り抜いた要素に box-shadow を使っても影は表示されません(切り取られてしまうため)。この場合、親要素に drop-shadow() をかけることで解決できます。

HTML + CSS – clip-path 要素の影
<!-- 親要素にfilterを適用 -->
<div class="shape-wrapper">
  <div class="triangle"></div>
</div>
CSS
/* 親要素に影をつける */
.shape-wrapper {
  filter: drop-shadow(4px 4px 8px rgba(0,0,0,0.3));
}

/* 子要素をclip-pathで切り抜く */
.triangle {
  width: 200px;
  height: 200px;
  background: #3b82f6;
  clip-path: polygon(50% 0%, 0% 100%, 100% 100%);
}

なぜ親要素に filter を適用するのか

  • clip-path は要素を切り抜くため、切り抜かれた外側にある box-shadow は表示されない
  • filter: drop-shadow() を同じ要素に指定しても、切り抜き後の描画結果に適用されるが、一部ブラウザで不安定
  • 親要素(wrapper)filter をかけると、子要素の描画結果(=切り抜き後の形)に対して確実に影がつく

実務パターン集

実際の開発でよく使われる drop-shadow() のパターンを紹介します。

パターン1:ヘッダーロゴの視認性向上

CSS – ヘッダーロゴ
.site-logo img {
  max-height: 50px;
  filter: drop-shadow(0 1px 2px rgba(0,0,0,0.15));
  transition: filter 0.3s;
}

.site-logo img:hover {
  filter: drop-shadow(0 2px 6px rgba(0,0,0,0.25));
}

パターン2:SNSアイコンのホバー効果

CSS – SNSアイコン
.sns-icon {
  width: 32px;
  height: 32px;
  filter: drop-shadow(0 1px 2px rgba(0,0,0,0.1));
  transition: filter 0.3s, transform 0.3s;
}

/* ブランドカラーの影で発光 */
.sns-icon.twitter:hover {
  filter: drop-shadow(0 0 8px rgba(29,161,242,0.6));
  transform: scale(1.1);
}

.sns-icon.github:hover {
  filter: drop-shadow(0 0 8px rgba(36,41,46,0.5));
  transform: scale(1.1);
}

パターン3:パートナーロゴ一覧

CSS – ロゴ一覧(グレー→カラー+影)
.partner-logos {
  display: flex;
  gap: 2rem;
  align-items: center;
  flex-wrap: wrap;
}

.partner-logos img {
  max-height: 40px;
  filter: grayscale(1) opacity(0.5);
  transition: filter 0.4s ease;
}

.partner-logos img:hover {
  filter: grayscale(0) opacity(1)
         drop-shadow(0 4px 8px rgba(0,0,0,0.15));
}

パターン4:装飾的なアイコンボタン

CSS – アイコンボタン
.icon-btn {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  padding: 8px 16px;
  background: transparent;
  border: none;
  cursor: pointer;
}

.icon-btn img {
  width: 24px;
  height: 24px;
  filter: drop-shadow(0 1px 2px rgba(0,0,0,0.15));
  transition: filter 0.2s;
}

.icon-btn:hover img {
  filter: drop-shadow(0 2px 6px rgba(0,0,0,0.3));
}

.icon-btn:active img {
  filter: drop-shadow(0 0 1px rgba(0,0,0,0.2));
}

パターン5:CSS三角形(border trick)への影

CSS – CSS三角形に影をつける
/* 親要素にfilterを指定 */
.tooltip-wrapper {
  filter: drop-shadow(0 2px 8px rgba(0,0,0,0.15));
}

/* ツールチップ本体 */
.tooltip {
  background: #fff;
  padding: 12px 16px;
  border-radius: 8px;
  position: relative;
}

/* 三角形の矢印 */
.tooltip::after {
  content: '';
  position: absolute;
  bottom: -8px;
  left: 50%;
  transform: translateX(-50%);
  border: 8px solid transparent;
  border-top-color: #fff;
  border-bottom: none;
}

ポイント:ツールチップの本体と矢印(三角形)を含む親要素に drop-shadow() をかけることで、矢印部分にも自然な影がつき、一体感のあるデザインになります。box-shadow では矢印部分に影がつかないため、この手法が唯一の解決策です。

パフォーマンスの注意点

filter: drop-shadow() は便利ですが、パフォーマンスへの影響を理解しておくことが重要です。

なぜ重くなるのか

原因 詳細
ピクセル解析 各ピクセルの透明度を調べて影の形状を計算する必要がある
GPU処理 filter プロパティはGPUレイヤーを生成し、合成処理が発生する
再計算 要素の内容が変わるたびに影の形状を再計算する
blur の負荷 ぼかし半径が大きいほど計算コストが増大する

パフォーマンス最適化のポイント

CSS – パフォーマンス最適化
/* 1. will-change でGPUレイヤーを事前確保 */
.optimized-shadow {
  will-change: filter;
  filter: drop-shadow(0 2px 4px rgba(0,0,0,0.2));
}

/* 2. アニメーション時のみ will-change を有効化 */
.shadow-on-hover {
  filter: drop-shadow(0 2px 4px rgba(0,0,0,0.2));
  transition: filter 0.3s;
}

.shadow-on-hover:hover {
  will-change: filter;
  filter: drop-shadow(0 8px 16px rgba(0,0,0,0.3));
}

/* 3. 大量の要素には box-shadow を検討 */
/* 100個以上のリスト項目 → box-shadow が軽い */
.list-item {
  box-shadow: 0 2px 4px rgba(0,0,0,0.1);
}

注意:will-change は常に指定するのではなく、アニメーションする要素にのみ使用してください。多用するとメモリ消費が増加します。また will-change: filter は要素のスタッキングコンテキストを生成するため、z-index の挙動が変わる場合があります。

パフォーマンスガイドライン

状況 推奨
透過画像 1〜10個 drop-shadow() で問題なし
透過画像 10〜50個 blur を小さめに抑える。アニメーションは限定的に
透過でない画像・ボックス box-shadow のほうが軽い
スクロール連動アニメーション will-change: filter を必ず指定
100個以上のリスト項目 box-shadow に切り替え推奨

ブラウザ互換性

filter: drop-shadow() は主要ブラウザで広くサポートされています。

ブラウザ 対応バージョン 備考
Chrome 18+ 完全対応
Firefox 35+ 完全対応
Safari 9.1+ 完全対応
Edge 79+(Chromium版) 完全対応
iOS Safari 9.3+ 完全対応
Android Chrome 53+ 完全対応
IE 11 非対応 filter プロパティ自体が非対応

互換性に関する補足

  • 2026年現在、IE11 のサポート終了により、ベンダープレフィックス(-webkit-filter)は基本的に不要です
  • サポート率は Can I Use によると全世界で 97% 以上
  • IE11 対応が必要な場合は、box-shadow をフォールバックとして併記してください

フォールバック(IE11対応が必要な場合)

CSS – フォールバック付き
.logo-shadow {
  /* IE11 用フォールバック */
  box-shadow: 0 2px 4px rgba(0,0,0,0.3);

  /* モダンブラウザ用 */
  filter: drop-shadow(0 2px 4px rgba(0,0,0,0.3));
}

/* @supports で切り分ける場合 */
.logo-shadow-v2 {
  box-shadow: 0 2px 4px rgba(0,0,0,0.3);
}

@supports (filter: drop-shadow(0 0 0 black)) {
  .logo-shadow-v2 {
    box-shadow: none;
    filter: drop-shadow(0 2px 4px rgba(0,0,0,0.3));
  }
}

よくある問題と対処法

問題1:影が二重に見える

CSS – NG:img と親要素の両方に filter
/* NG:親と子の両方に filter を指定 → 影が二重になる */
.wrapper {
  filter: drop-shadow(0 2px 4px rgba(0,0,0,0.3));
}
.wrapper img {
  filter: drop-shadow(0 2px 4px rgba(0,0,0,0.3));
}

/* OK:どちらか一方にだけ適用する */
.wrapper img {
  filter: drop-shadow(0 2px 4px rgba(0,0,0,0.3));
}

問題2:背景色がある要素で矩形の影になる

drop-shadow()不透明な部分の輪郭に沿って影をつけるため、背景色を持つ要素では矩形の影になります。

CSS – 背景があると矩形の影になる
/* 背景色があると要素全体が「不透明」と判定される */
.has-bg {
  background: #fff;
  padding: 20px;
  /* → box-shadow と同じ矩形の影になる */
  filter: drop-shadow(0 2px 4px rgba(0,0,0,0.3));
}

/* 対策:背景色のない要素に適用する */
.no-bg img {
  /* img 自体に背景がなければ、画像の形に影がつく */
  filter: drop-shadow(0 2px 4px rgba(0,0,0,0.3));
}

問題3:transition がカクつく

CSS – transition 最適化
/* NG:filter 全体を transition すると他のフィルターも含まれて重い */
.slow {
  filter: brightness(1) contrast(1) drop-shadow(0 2px 4px rgba(0,0,0,0.2));
  transition: all 0.3s; /* 重い! */
}

/* OK:filter だけを transition 対象にする */
.fast {
  filter: drop-shadow(0 2px 4px rgba(0,0,0,0.2));
  transition: filter 0.3s ease;
  will-change: filter;
}

問題4:position: fixed / sticky の子要素への影響

filter を指定した要素は新しいスタッキングコンテキストを生成します。これにより、内部の position: fixedposition: absolute と同じ挙動になる場合があります。

CSS – スタッキングコンテキストの問題
/* NG:親に filter があると子の fixed が壊れる */
.parent {
  filter: drop-shadow(0 2px 4px rgba(0,0,0,0.2));
}
.parent .modal {
  position: fixed; /* → absolute として振る舞う! */
}

/* 対策:filter を子要素に直接適用する */
.parent img {
  filter: drop-shadow(0 2px 4px rgba(0,0,0,0.2));
}

問題5:Retinaディスプレイで影がぼやけすぎる

高解像度ディスプレイでは影の見え方が変わることがあります。

CSS – Retinaディスプレイ対応
/* 標準ディスプレイ用 */
.logo {
  filter: drop-shadow(0 2px 6px rgba(0,0,0,0.25));
}

/* 高解像度ディスプレイでは影を少し控えめに */
@media (-webkit-min-device-pixel-ratio: 2),
       (min-resolution: 192dpi) {
  .logo {
    filter: drop-shadow(0 1px 4px rgba(0,0,0,0.2));
  }
}

まとめ

ポイント 内容
用途 透過PNG/SVG、clip-path要素、CSS三角形など、形状に沿った影が必要なとき
box-shadow との違い box-shadow は矩形ベース、drop-shadow は不透明ピクセルベース
構文 filter: drop-shadow(offset-x offset-y blur color)(spread と inset は不可)
複数の影 filter 関数をスペースで連結(カンマ区切りではない)
アニメーション transition: filter で滑らかに変化。will-change: filter で最適化
パフォーマンス GPU処理のため box-shadow より重い。大量使用は避ける
ブラウザ対応 主要ブラウザすべて対応。IE11 のみ非対応(2026年現在は問題なし)

filter: drop-shadow() は、透過画像やSVGアイコンを扱う現代のWeb開発において必須のテクニックです。box-shadow との違いを理解し、適材適所で使い分けることで、パフォーマンスを保ちながら美しい影の表現を実現できます。