このSVGの部分(FF 8、Safari 5.1.2、Chrome 16、すべてMac)で試しました)で、マウスをバーの上に移動すると、ブラウザーはどれも各オンマウスを適切に検出しません-over/outイベント、時々動作する場合もありますが、すべてのブラウザで一貫しているため、おそらくSVGコードに関するものです。onmouseover
とonmouseout
を使用すると、同じ結果が得られます。正しく動作しません。
SVG rect
anglesのホバーに実装する正しい方法は何でしょうか?
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="800" height="600" version="1.1" style="display:inline">
<style type="text/css">
.bar {
fill: none;
}
.bar:hover {
fill: red;
}
</style>
<g>
<rect class="bar" x="220" y="80" width="20" height="180" stroke="black" stroke-width="1" />
</g>
</svg>
何が起こっているのかは、塗りつぶしが「なし」であるため、マウスイベントが検出されないことです。追加するだけです。
.bar {
fill: none;
pointer-events: all;
}
その後、それはうまく動作します。
fill: none; pointer-event: all;
は最新のブラウザのほとんどで動作するはずですが、IE9とIE10はpointer-events
をサポートしていません。また、pointer-events: fill
を設定することもできます。このfill
値は SVGのみ です。つまり、fill
またはvisibility
の値は ' tは、ポインターイベントの処理に影響します。
IE9およびIE10の回避策は、fill: transparent
がサポートされていない場合にCSSをpointer-events
に設定することです(Modernizrを使用してブラウザー機能を検出できます)。
$("#rect").mouseenter(function() {
$(this).css("fill", "teal")
}).mouseout(function(){
$(this).css("fill","transparent")
})
#rect {
fill: transparent;
stroke: blue;
stroke-width: 1px
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.0/jquery.min.js"></script>
<svg width=300 height=300>
<rect id="rect" x=0 y=0 width=100 height=100></rect>
</svg>
.bar:hover {
fill: red !important;
}
不透明な塗りつぶしを試してください。
また、<style>
は<svg>
。