IE6と格闘する日々は以前より少なくなりましたが、ここ最近はIE7やIE8の新たな問題に直面することが多くなったように感じます。
そこで「IE6のバグ、トラブル回避策」に続き、IE7のバグ、トラブル回避策をこのページにまとめます。
あと何年経てば、このIEの呪縛から解放されるんですかね。
「display: inline-block;」が効かない
IE7以下ではdisplayにinline-blockは使用できません。
そこでIE7以下のハックでinlineを指定します。
.sample ul li{
display: inline-block;
/display: inline;
/zoom: 1;
}
例えばfloatを用いない回り込みなどもこれで解決できます。
この時、わずかなズレが発生するのでzoomの指定も忘れないように。
tableでセルのwidth指定が無視される
tableでセルのwidthを指定しても効かない場合があります。
これはバグというより、厳密にはIEの仕様としては正しいみたいですが。。。
モダンブラウザとは違う挙動をするので困ります。
このような場合は以下のようにしてあげれば、IE7でも幅指定ができるようになります。
table{
table-layout: fixed;
}
実際にこのページを各ブラウザで確認してもらえれば分かりますが、「table-layout: fixed;」を指定すると、IEでもwidth指定が有効になります。
| width: 100px; | width指定なし |
|---|---|
| こちらのテーブルは | table-layoutにfixedを指定しています |
| width: 100px; | width指定なし |
|---|---|
| こちらのテーブルは | table-layoutなしです |
「z-index」が効かない
モダンブラウザではz-indexが効いているが、
IE7、IE6では効かずに、ターゲットとなる要素の重なりがばらばらになる場合があります。
.parent .target{
z-index: 10;
}
その際には、ターゲットの要素のみならず、親要素にもz-indexを指定してあげます。
.parent{
z-index: 9;
}
.parent .target{
z-index: 10;
}
それでも改善しない場合は、以下のように「position: relative」を指定してみます。
.parent{
position: relative;
z-index: 9;
}
.parent .target{
z-index: 10;
}
ほとんどの場合はここまでで解決するはずですが、
改善しない場合は、対象となる他の要素にpositionやz-indexを設定してみます。
htmlやcssの構造により、症状は複雑になるようなので、こればっかりは明確な答えは出しにくいです。
「position: absolute」の配置がズレる
IE6、IE8以上では問題なく、IE7のみで「position: absolute」がズレる場合、以下の方法で解決する場合があります。
absoluteを設定する場合に、親要素にrelativeを指定しますが、そのrelativeを指定したさらに親の要素に「height:100%;」を指定します。
.grandparent{
height: 100%;
}
.grandparent .parent{
position: relative;
}
.grandparent .parent .target{
position: absolute;
}
こちらはさまざまなシチュエーションが重なった場合に、稀に発生する事象のようなので、解決策としては絶対ではありません。
コメントする