SVGの要素に fill:none を設定すると hover が利かなくなる

先日、SVGの要素 (rect) にCSSで:hoverを利用して内部の色が変わるように設定したところ、カーソル (マウスポインター) を要素の上にかざしても反応しないという現象に遭遇しました。全く反応しないわけでもなく、たまに反応する場合もありました。原因を調べたところ、SVGの要素の stylefill:none を設定すると、hoverが利かないということがわかりました。(FirefoxとEdgeで確認しました。)

下のSVGがその例です。

左の正方形がfill:noneを設定しているものです。マウスを正方形の中に移動させても反応しないのがわかります。ただ、全く反応しないのではなく、反応する場合もあります。特に、枠線のあたりにマウスを持っていくと反応することもあります。

真ん中の正方形が同じくfill:noneを設定して、枠線を太くしたものです。ほぼ問題なく反応することがわかります。反応しない場合もあります。

枠線を太くせずに、正方形の内部を透明にして :hover を使いたい場合は、fill:none にせずに、fill-opacity: 0 として、透明な色で塗り潰すようにします。また、:hover の設定で fill-opacity: 1 として不透明にする必要があります。そのように設定したのが一番右の正方形です。

今回の例では SVG の rect を使用しましたが、circle などでも同様でした。

Posted in SVG