作例4

JavaScript を用いて、onmouseover と onmouseout の操作に対応して class 属性値を切り替える。

初期値は off で、子要素の ol 要素は非表示。オンマウスで値が off にセットされ、子要素の ol 要素が表示される。

ul.main に position:absolute; を指定すれば、子要素の表示により領域が拡張されても他の要素の配置に影響を及ぼさない。

すると不思議なことに WinIE ではカーソルが拡張前の領域を外れると属性値切り替えがキャンセルされる。

対策1

div
{height:5em;}
ul.main
{position:absolute;}
ul.main li
{margin:1em; padding:10px; border:1px solid #000; list-style:inside; background:#ccc;}
ul.main li li
{background:#fff;}
li.on ol
{display:block; width:80%; overflow:hidden;}
li.off ol
{display:none;}

バグ対策ほどつまらないものもない。敵はルール無視の無法者だから、どんな可能性もありうる。幅指定が有効なら高さ指定も……と考えたが、無意味だった。子要素にカーソルが乗っている限りは縦方向移動にも対応するのだが、「ガッ」から「ガッガッ」へ移動しようとすると、間に広がる親要素領域で属性値切り替えがキャンセルされてしまう。