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>タグの中身がコピーされる。