CSSテクニック

IE6でもスクロールしても動かないボックス

今回はフレームもjavascriptも使わずに、スクロールしても動かないボックスの作り方を紹介します。 実はposition:fixedというプロパティを使えば一発でできるのですが、IE6で使えないためこれを使うのは現実的ではありません。

今回紹介するのは、「height100%のボックス」のテクニックを拡張したIE6でも使える方法です。

テクニック使用後

サンプル

本文をスクロールしてもメニュー部分が動かないところに注目してください。


やり方

1:HTMLを書く

HTMLはこんな感じになります。

<body>
<div id="sub">
<ul class="sample">
<li><A href="#">トップページ</A></li>
<li><A href="#">初心者の館</A></li>
<li><A href="#">私的デザイン論</A></li>
<li><A href="#">CSSテクニック</A></li>
<li><A href="#">ギャラリー</A></li>
</ul>
</div>
<div id="main">
<h1>IE6でもスクロールしても動かないボックスサンプル</h1>
<p>フレームやjavascriptを使わなくても、スクロールしても動かないボックスを作ることは可能なのです。</p>
<p>しかも、position:fixed;が効かないIE6でも使える方法です。</p>
<p>左のメニュー部分に注目してください。スクロールしても動かないでしょ。</p>
・・・略
</div>
</body>

HTML解説

特に難しいところはありません。ID="sub"にメニュー部分、ID="main"に本文を記述するだけです。

2:スタイルシートを書く

ポイントとなるスタイルシートはこんな感じになります。これ以外はお好みで追加できます。

html{
    height:100%;
    overflow:hidden;
}
body{
    background-image:url(../../../img/back.gif);
    height:100%;
    width:80%;
    margin:0px auto;
}
#sub{
    width:104px;
    height:100%;
    background-color:#7F2D00;
    position:absolute;
    z-index:100;
}
div#main{
    background-image:url(../../../img/sub-back.jpg);
    height:100%;
    padding-left:104px;
    overflow:auto;
}

CSS解説

今回のポイントは、height100%ボックスのテクニックを使ってheight100%の#mainと#sub2つのボックスを作ったところにあります。

まず#subをposition:absolute;で配置。さらにz-index:100;を加えて常に一番上に表示するようにします。

続いて#mainにpadding-left(値は#subのwidthと同じ)を指定してサイドバーに隠れないようにします。 さらに本文が長くなったときスクロールできるようにoverflow:auto;を指定。

overflow:auto;によって出来るスクロールバーは個々のボックスにしか影響を与えないため、今回の場合は#mainだけスクロールするのに、#subはスクロールしないという状況を生み出します。

これによりスクロールしても動かないボックスができあがります。

bodyのwidthを削れば画面全体にページが広がります。その場合はhtmlにoverflow:hidden;を指定してスクロールバーを消してしまうと見栄えが良くなります。


使いこなすための+α

このテクニックはサイドバーの背景が切れてしまう問題に悩んでいた人にとって1つの解決策になるかもしれません。

残念ながらfirefoxではホイールが使えなくなるという欠点があります。

毎度のことながらIE6,firefox,Opera7.5以外ではどのように見えるかわかりません。


一覧へ戻る


Last Modified 2005-09-12 © きくちゃん 2004 - All Rights Reserved