はじめに
IE では透明なオーバーレイ要素のマウスイベントのハンドリングがおかしい
たとえば
以下のページで表示されている要素には透明な div がオーバーレイされています。そして、その要素に mouseover が発生すると背景を青くしています。
試してみてください。 IE では、想定の挙動ができていないことが分かると思います。
http://amachang.sakura.ne.jp/misc/mouseoutover/
ソースコードは以下。
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Test</title> <style> p { border: solid 10px gray; background: pink; padding: 10px; margin: 10px; line-height: 2; } #a { position: absolute; z-index: 1; top: 0; left: 0; right: 0; bottom: 0; } </style> </head> <body> <div style="position: absolute" id="back"> <div id="a"></div> <p>aaaaaaaaaaa</p> <p>a a <br/>a a a a a a a a a a a a a a a a a a a a </p> </div> <script> var $ = function(id) { return document.getElementById(id) } var backEl = $('back'), el = $('a'); el.onmouseover = function() { backEl.style.background='lightblue'; }; el.onmouseout = function() { backEl.style.background='transparent'; }; </script> </body> </html>
IE の挙動
どうやら、 IE 7 では、透明(background: transparent)な要素にはマウスイベントが発生しないようです。
そして、 IE 8 では、透明な要素にもマウスイベントが発生するのですが、 z-index 的に下にボーダーや行ボックスが存在すると、そちらにイベントを発火するようです。
対策
対策としては、以下のように background: transparent じゃない透明(background: white; filter: alpha(opacity=0))な要素を作ってあげるのがいいと思います。
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Test</title> <style> p { border: solid 10px gray; background: pink; padding: 10px; margin: 10px; line-height: 2; } #a { position: absolute; z-index: 1; top: 0; left: 0; right: 0; bottom: 0; } /* 以下の行を追加 */ #a { background: white; filter: alpha(opacity=0); opacity: 0 } </style> </head> <body> <div style="position: absolute" id="back"> <div id="a"></div> <p>aaaaaaaaaaa</p> <p>a a <br/>a a a a a a a a a a a a a a a a a a a a </p> </div> <script> var $ = function(id) { return document.getElementById(id) } var backEl = $('back'), el = $('a'); el.onmouseover = function() { backEl.style.background='lightblue'; }; el.onmouseout = function() { backEl.style.background='transparent'; }; </script> </body> </html>