SVGには、<feDropShadow>
という要素がある。これを使うと、SVGの図形にCSSのbox-shadow
のような影をつけることができる。
feDropShadowタグの使い方
<feDropShadow>
タグの’fe’は、’filter effect’の略だ。日本語ではそのままフィルタ効果と呼ぶ。これは、SVGにさまざまな画像効果を加える命令である。
フィルタ効果は、以下のようにして使う。
- まず、
<defs>
タグの中に任意のid
を指定した<filter>
タグを用意する。 <filter>
タグの中に、任意のフィルタ効果(<feXXX>
的なタグとその属性値)を指定する。- 任意の図形タグの
filter
属性に、1,2で定義した<filter>
タグのid
を指定する。
<feDropShadow>
タグの場合、以下のような属性値を指定して、影の効果を指定できる。
主な属性値
属性値の種類 | 概要 |
---|---|
dx |
ドロップシャドウの2 。 |
dy |
ドロップシャドウの2 。 |
stdDeviation |
ドロップシャドウのぼかしに使う標準偏差。デフォルト値は2 。 |
flood-color |
影の色。デフォルト値はblack 。 |
flood-opacity |
影の不透明度。0-1 か% で指定。デフォルト値は1 。 |
このほか、id
,class
,style
といった基本的な属性値や、フィルタのプリミティブな属性値も指定できるが、使用頻度が高くないので割愛する。
影の領域を広げるには
<feDropShadow>
タグに限らず、フィルタ効果の描画範囲は<filter>
タグの4つの属性値に左右される。
属性値の種類 | 概要 |
---|---|
x |
対象要素の左上の-10% 。 |
y |
対象要素の左上の-10% 。 |
width |
対象要素の幅に対する、フィルタ領域の相対的な幅。デフォルト値は120% 。 |
height |
対象要素の高さに対する、フィルタ領域の相対的な高さ。120% 。 |
うまいこと説明できなかった。デフォルトでは、図形の幅と高さの上下10%
分までフィルタ効果の範囲が及ぶ。そこから先はスパッと途切れてしまう。
そのため、大きな影をつけたいときはfeDropShadow
の属性値だけでなくfilter
の属性値も適宜調整する必要がある。
SVGシェイプの影ツクール
上記の内容をもとに、<feDropShadow>
タグの各属性値の挙動を確かめるデモを作成した。copyボタンを押下すると、<filter>
タグの中身がコピーされる。