• HOME > 
  • CSS > 
  • CSSでPNG画像に影を落とす方法【filterプロパティd...

CSSでPNG画像に影を落とす方法【filterプロパティdrop-shadow】

投稿日:

このページにはGoogleアドセンス広告とアフィリエイト広告が含まれています。

カテゴリー記事のアイキャッチ画像

本記事は執筆時点(2025年01月15日)の情報をベースにしております。掲載している情報が最新ではない可能性がありますので何卒ご容赦ください。

広告
広告

CSSでドロップシャドウをつけるには?

CSSで要素に影(ドロップシャドウ)を付ける手段としては「box-shadow」や「text-shadow(テキストの場合)」が有名ですが、filterプロパティのdrop-shadow()関数でもドロップシャドウを設定できます。

drop-shadowの特徴は下図のようにPNG画像などの透明部分にも影をつけることができるという点です。

filterプロパティのdrop-shadowの例

box-shadowやtext-shadowプロパティとの違い

要素に影をつけるための3つのプロパティですが、効果や機能に微妙な違いがあるので、状況に応じた使い分けが必要になります。

以下にそれぞれのプロパティの特徴をまとめてみました。

box-shadow

まず、box-shadowプロパティは要素の境界に沿って影を落とすので、透過部分を持つPNG画像でも影の形は四角形になります。

HTML

<img src="sample1.png" class="box-shadow">

CSS

.box-shadow{
    box-shadow: 10px 10px 3px 3px #666;
}
box-shadowの例

また、影が付く対象はbox-shadowを設定した要素にのみであり、子要素を含んでいてもそちらには影は付きません。

HTML

<div class="myBox box-shadow"><img src="sample1.png"><p>box-shadow</p></div>

CSS

.mybox{
    padding: 10px;
    border:solid 3px #144da0;
}
.box-shadow{
    box-shadow: 10px 10px 3px 3px #666;
}
box-shadowの例

text-shadow

続いて、text-shadowはテキストに影を落とすためのプロパティですのでテキスト以外に設定しても何も変わりません。親要素に設定した場合は子要素のうちテキストにのみ影を落とします(親要素に背景が設定されていてもテキストの影は見えます)。

HTML

<div class="myBox text-shadow"><img src="sample1.png"><p>text-shadow</p></div>

CSS

.mybox{
    padding: 10px;
    border:solid 3px #144da0;
}
.text-shadow{
    text-shadow: 0 0 5px #000;
}
text-shadowの例

filter:drop-shadow

最後にfilterプロパティのdrop-shadowは要素の形状に沿って影を落とすことができるので、PNGのように透明部分を含んでいても形状に沿って影を付けることができます。

また、テキストに対しても影を落とすことができ、子要素を持つ場合はその子要素にも影がつきます(要素に背景が設定されていると子要素の影は見えません)。

HTML

<div class="myBox drop-shadow"><img src="sample1.png"><p>drop-shadow</p></div>

CSS

.mybox{
    padding: 10px;
    border:solid 3px #144da0;
}
.drop-shadow{
    filter:drop-shadow(0 0 5px #000);
}

要素にborderを設定している場合はborderに対しても影が付きます。

drop-shadowの例

一方でdrop-shadowでは要素の内側に影を落とす「inset」が使えなかったり、影の「広がり」を指定できないという制限もあります。

3つのプロパティの違いを表にまとめると以下の通りです。

filter:drop-shadow box-shadow text-shadow
PNG画像 PNG画像にdrop-shadowを設定した例 PNG画像にbox-shadowを設定した例 PNG画像にtext-shadowを設定した例
テキスト ×
子要素への影響 × ×
内側に影を落とす(inset) × ×
影の広がりの指定 × ×

filterプロパティとは?

CSSのfilterプロパティは、画像や要素に様々な視覚効果を加えることができるプロパティです。

ドロップシャドウ以外にも、セピア化や、色調変更、明るさの調整など、画像編集ソフトで加工するような処理をCSSだけで簡単に実装できるのが特徴です。

filterプロパティならびに他の関数についてはこちらのページにまとめています。

filter:drop-shadowの使い方

filterプロパティのdrop-shadow()関数は以下のように記述して使います。

filterプロパティのdrop-shadowの書き方

第一引数では水平方向(左右)の位置を設定します。右に移動させたい場合は正の数、左に移動したい場合は負の数を使って移動させます。

第二引数では垂直方向(上下)の位置を設定します。下に移動させたい場合は正の数、上に移動したい場合は負の数を使って移動させます。

第三引数では影のぼかし半径を設定します。数値を大きくするほど、影は薄く広範囲に広がります。

下の例では要素に対して、「右に3px」「下に3px」の位置に「ぼかし3px」「色は黒(#000000)」の影を設定しました。

HTML

<img src="https://web.skipjack.tokyo/wp-content/uploads/css/filter-drop-shadow/sample1.png" class="myFilter drop-shadow1">

CSS

img.myFilter.drop-shadow1{
    filter: drop-shadow(3px 3px 3px #000000);
}

プレビュー

ドロップシャドウのプレビュー

ドロップシャドウを解除したい場合は「drop-shadow(none)」を指定します。

数値による表示結果の違い

下記はドロップシャドウの表示を簡易的に確認するシミュレーターです。

入力した「水平方向」「垂直方向」「ぼかし量」「影の色」が画像に反映されます。

filter:drop-shadow(px px px );

アニメーションで影をつける

filterプロパティの利点のひとつとして、transitionやanimationプロパティと組み合わせることで効果をアニメーションで見せることができるという点が挙げられます。

下図のような写真に対して徐々に影をつけるようなアニメーションは、CSSだけであっという間に実装できます。

今回作成したコードは以下の通りです。

CSS

img.myFilter.drop-shadow-anime{
    animation: drop-shadowAnime 5s infinite;
}
img.myFilter.drop-shadow-anime{
    max-width:400px;
    margin: 0 auto;
    animation: drop-shadowAnime 2.5s infinite;
}
@keyframes drop-shadowAnime{
    0%{
        filter:drop-shadow(none);
    }
    50%{
        filter: drop-shadow(0 0 5px #333);
    }
    100%{
        filter: drop-shadow(none);
    }
}

2行目animationプロパティを使ってアニメーションを設定します。(今回は例としてアニメーションがわかりやすいようにinfiniteを指定してアニメーションが繰り返されるようにしています)

4行目@keyframesでアニメーションの動きを設定します。

5行目~影を付けたり消したりを繰り返すように指定しました。

animationプロパティの使い方について詳しくはこちらのページにまとめています。

まとめ

以上が、filterプロパティのdrop-shadow()関数を使ってCSSだけで写真に影を落とす方法です。

PNG画像の透過部分にドロップシャドウを付けられるという点は大きなポイントですので是非活用してみてください。

広告
広告

関連する記事

サムネイル

CSSのfilterプロパティの関数の種類と効果をまとめ【フ……

2025年01月06日
最終更新日:2025年01月15日
IEのサポートが終了したので、これまで使う機会の少なかったfilterプロパティを改めて調べたところ、CSSでの表現の幅を広げてくれる画期的なプロパティだと気づ […]
サムネイル

CSSで写真にぼかし加工を加える方法【filterプロパティ……

2025年01月06日
CSSだけで写真をぼかせる? CSSのfilterプロパティのblur()関数を使うと、画像(要素)にぼかしを加えることができます。 画像編集ソフトを使うことな […]
サムネイル

CSSで写真の明るさ(明度)を調整する方法【filterプロ……

2025年01月06日
CSSだけで画像の明度を調整できる? CSSのfilterプロパティのbrightness()関数を使うと、画像(要素)の明るさを変更することができます。 画像 […]
サムネイル

CSSで写真のコントラストを変更する方法【filterプロパ……

2025年01月06日
CSSだけで写真のコントラストを調整できる? CSSのfilterプロパティのcontrast()関数を使うと、画像(要素)のコントラストを変更することができま […]
サムネイル

CSSで写真を白黒に変更する方法【filterプロパティgr……

2025年01月06日
CSSだけで写真を白黒にできる? CSSのfilterプロパティのgrayscale()関数を使うと、画像(要素)を白黒に変更することができます。 グレースケー […]
サムネイル

CSSで写真をセピアに加工する方法【filterプロパティs……

2025年01月06日
CSSで写真をセピアに加工できる? CSSのfilterプロパティのsepia()関数を使うと、画像をセピア色に変換できます。 画像編集ソフトを使うことなくCS […]