posiotion: absolute;で絶対配置に固定したli属性は、IE6もしくはIE7において、display: block;が効かない?
既に、どこかで公表されているバグなのかもしれないけれど、自分がハマリにハマリ、今日一日をこれだけのために使ったと言っても過言ではないので。
こんなコードを書いていた。まず、HTML。
<div id="navi"> <ul> <li><a href="#">ああああ</a></li> <li><a href="#">いいいい</a></li> <li><a href="#">うううう</a></li> </ul> </div>
簡単なulとliで書いたナビゲーション用のコード。次はCSS。
#navi {
position: absolute;
width: 240px;
left: 21px;
top: 411px;
margin: 0;
padding: 0;
}
#navi ul {
list-style-type: none;
margin: 0;
padding: 0;
}
#navi li {
margin: 0;
padding: 0;
}
#navi li a {
display: block;
width: 240px;
height: 35px;
border: 1px solid #FF3300;
margin-bottom: 33px;
}position: absolute;でul、liを絶対配置して、その上で、リストのマーカーボックスを消して、更にa要素にdisplay: block;を指定して、リンク領域を広げるという方法。
これで、Firefoxなどのモダンブラウザは完璧にきれいに表示された。けれど、IE6、IE7共にこけた。ものの見事に。バグの部分は、display: block;でリンクの領域が広がらないというバグ。つまり、#navi li aで指定しているwidthとheightは一切適応されず、文字列の「ああああ」や「いいいい」の領域にしかリンクが生きてこない。ちなみに、border自体はちゃんとwidthとheightの指定どおりに、表示される。が、リンクだけが全くダメ。
で、こういったコードに近いものを書いたことがある人も多いと思うのだけど、これが引っ掛かる部分はどうやら#naviにposition: absolute;を指定しているからのよう。実際、position: absolute;とそれに関連するコードを取った際は、IEの両バージョンでも問題なく表示できた。要は、絶対配置でliを並べる時は、display: block;でリンク領域を広げることは無理だってこと。僕も仕方がなく、HTML側に通常の画像をimg srcで入れ込むことにした。
IE6はまあ仕方がないにしても、最新バージョンであるIE7で引っ掛かるのはどうなんだろう。肝いりで発表され、CSS実装もIE6に比べればちゃんとしていると言われながらも、いきなり僕は躓いた。本当に、嫌になる。