こんにちは、さち です。
先日、ウェブサイトを作っているとき、「CSS」を使って影を付けたいことがありました。
しかし、個人的には使用頻度があまり高くないし種類も多く、すぐに書き方を忘れてしまうので、備忘録としてこの記事を残しておきます。
影を付ける CSS のプロパティ「text-shadow」「box-shadow」「drop-shadow」の違いについても見ていくので、参考になれば幸いです。
【文字の影】 text-shadow
text-shadow
はその名のとおり、「テキスト」に影を付けられるプロパティです。
サンプル
<span>テキスト</span> <img src="transparent-image.png" />
span { color: deeppink; border: 4px solid deeppink; border-radius: 15px; } span, img { text-shadow: -6px 18px 4px gray; }

「テキスト」だけに影が付き、「画像」には付きません。
書き方
/* サンプル */ text-shadow: -6px 18px 4px gray; /* それぞれの値の意味 */ text-shadow: 横方向の位置 縦方向の位置 [ぼかしの強さ] [影の色];
[]
で囲んだものは記述を省略できます。
「ぼかしの強さ」を省略した場合は 0
になります。また、「影の色」を省略した場合は「文字の色」の color
プロパティの値と同じになります。
【要素の影】 box-shadow
box-shadow
は、「要素」に影を付けられるプロパティです。
サンプル
<span>テキスト</span> <img src="transparent-image.png" />
span { color: deeppink; border: 4px solid deeppink; border-radius: 15px; } span, img { box-shadow: -6px 18px 4px 0 gray; }

「テキスト」「画像」ともに影を付けられますが、あくまでも「要素」の形に合わせて付きます。
そのため、「透過PNG」であっても画像要素の形(長方形の形)に影がつきます。
書き方
/* サンプル */ box-shadow: -6px 18px 4px 0 gray; /* それぞれの値の意味 */ box-shadow: 横方向の位置 縦方向の位置 [ぼかしの強さ] [拡張する量] [影の色];
[]
で囲んだものは記述を省略できます。
「ぼかしの強さ」「拡張する量」を省略した場合は 0
になります。また、「影の色」を省略した場合は「文字の色」の color
プロパティの値と同じになります。
【透過用の影】 drop-shadow
drop-shadow
は、「透過画像」に影を付けるときに便利なプロパティです。
サンプル
<span>テキスト</span> <img src="transparent-image.png" />
span { color: deeppink; border: 4px solid deeppink; border-radius: 15px; } span, img { filter: drop-shadow(-6px 18px 4px gray); transform: translateZ(0);/* Safari での表示崩れ対策 */ }

「透過PNG」の形に合わせて影が付きます。
「テキスト」は、要素に背景色がある場合は「要素」の形に、ない場合は「テキスト」の形に影が付きます。
書き方
/* サンプル */ filter: drop-shadow(-6px 18px 4px gray); /* それぞれの値の意味 */ filter: drop-shadow(横方向の位置 縦方向の位置 [ぼかしの強さ] [影の色]);
drop-shadow
は前述の2つとは異なり、filter
の機能の一種です。記述するときは、filter
プロパティの中に書く必要があるので注意しましょう。
また、[]
で囲んだものは記述を省略できます。
「ぼかしの強さ」を省略した場合は 0
になります。また、「影の色」を省略した場合は「文字の色」の color
プロパティの値と同じになります。
知ってると便利なこと
影は複数個つけることもできます。
サンプル
<span>テキスト</span> <img src="transparent-image.png" />
:root { --shadow-color: brown; } span { color: gold; /* 擬似的にテキストをフチ取り */ text-shadow: 1px 1px 0 var(--shadow-color), -1px 1px 0 var(--shadow-color), 1px -1px 0 var(--shadow-color), -1px -1px 0 var(--shadow-color), 0px 1px 0 var(--shadow-color), 1px 0px 0 var(--shadow-color), 0px -1px 0 var(--shadow-color), -1px 0px 0 var(--shadow-color); } img { /* 擬似的に画像を複製 */ filter: drop-shadow(-30px 0 0 skyblue) drop-shadow(30px 0 0 lightgreen); transform: translateZ(0);/* Safari での表示崩れ対策 */ }

色の記述は変数を使うと、後で変更することがあっても楽です。
影を複数個付ける場合、text-shadow
box-shadow
は ,
で区切る必要がありますが、drop-shadow
は スペース
でOKです。
微妙に仕様が違ってややこしいです。間違えないようにしましょう。
コメント