Internet Explorer (以下IE) 6 では、Cascading Style Sheet (以下CSS)の position : fixed
が無視されます。そのことについての情報を扱うページです。
当サイトでも position:fixed を使用しております。Mozilla (Netscape7), Opera7 ではきちんと動作しますが、IE6では無視されてしまうようです。絶対配置すらされませんので表示はかなり崩れます。絶対配置されない問題を解決するには、スタイルを以下のように記述します。
{
position : fixed!important; /* importantで、Mozilla, Opera に対して優先順位を上げて固定配置 */
position : absolute; /* Internet Explorer 用に絶対位置配置する */
/* あとは普通にボックスの位置指定をすればよい。これらは例。0 でなくてもいい */
top : 10%;
left : 0;
right : 0;
bottom : 0;}
これにより、Mozilla, Operaなど、きちんと position:fixed を解釈できるブラウザは要素を固定配置し、IEは要素を絶対配置します。スクロールしなければ、見た目はほぼ等しくなるはずです。
スタイルを次のように記述します。
html {
width : 100%; /* 表示をウィンドウ幅一杯にする為 */
margin : 0; /* 同じ理由 */
overflow : auto; /* スクロールバーを隠す為。hidden でもOK */
}
body {
width : 100%; /* 幅一杯にする為 */
margin : 0;
height : 100%;
overflow:auto;
}
div.header { /* 上部固定配置したい要素 */
/* 先の方法で絶対位置指定配置する */
}
このように記述することで、一応IEで擬似フレームが使えます。しかし、この方法だと、Mozillaでスクロールバーが全く表示されません。これは、html{oveflow:auto;}
が原因で起きているようです。
他はあっても大丈夫そうなので、この部分を、IEのみに適応すればよいわけです。
<!--[if IE 6]>
このコメントは、IE6の場合にコメントとして扱われない。
<![endif]-->
このコメントを用いて、IE用の外部スタイルシートへのlink要素を作るなり、スタイルを直接記述するなりすればよいのです。
JavaScript(JScript) を用いてIEだけにスタイルを用います。IEを判別するには、window.attachEvent()
等を用います。また、html{overflow:auto;}
以外は、windowの読み込み前に定義しておかないと、期待通りにはなりません。
この方法は、Standards-compliant modeのときのIEにしか適用できません。IE5, IE5.5で実現できるかは不明です。幸い私のサイトは殆どHTML4.01 Strictで記述してあるので、大丈夫でした。しかし、XML宣言のあるXHTMLでは使えないというところが辛いですね。
IEにはバグがあり、この方法を用いると、固定配置した要素以外で、a:hover にbackground-color, boder などのスタイルを適用していると、表示が崩れます。詳しくは、CSSバグリストへ。