現在制作中のサイトでは、SVGを多用しているのですが、ある時Safariでサイトを確認するとCSSのfilterが効いていないことに気が付きました。
本来は、照明の下の図をぼかすことで、照明がついているような図になるのですが、
Safariではボケずに表示されてしまっているのです。
CSSは以下の通り。
#blur path {
filter: blur(5px);
fill-opacity: 0.3;
}
fill-opacityは効いているのに、filterが効いていない状態。SVG全体ならfilterも効くのですが、SVG内の一部のオブジェクトには効かないのです。
Safariのみで起こるバグと言っている人もいるので、バグならそのうち解消されるのかもしれない。しかし、ざっと検索すると数年前からfilter周りで不具合は続いているような感じもある。
基本的に放置しかないかなと、諦めていたのですが、やはり気になってしまい色々模索。SVG内にfilterを記述して対応する方法がありました。
SVG内にfilterを記述
詳しくは下記のサイトを参照してください。
https://developer.mozilla.org/en-US/docs/Web/SVG/Element/filter
SVG内に以下を書いて、
<filter id="blurMe">
<feGaussianBlur stdDeviation="5" />
</filter>
適用したいオブジェクト内に「filter="url(#blurMe)"」を追加します。これで、Safariでもボケたオブジェクトを表示することができました。
イラレで予めぼかすと、ボケアシJPEGを生成しそれをSVGに読み込み擬似的にぼかすとか、それはそれで技術的に面白いとは思ったが、今回はSVGに直接記述する方法でなんとか理想的なものができた。
やっとこれで、次に進める。趣味でやっているので、躓くとなかなか次に進めることができなく、小さなところで何日も中断してしまいますね。