ひさびさの更新です。
さてさて、今回はとある案件で調べ物をしているときに見つけた手法で、面白かったので自分で作りつつ解説をしてみようと思います。
「ヘッダ、フッタの固定」サンプル
概要を話すと、縦幅100%表示にしたコンテンツボックスの上と下に、positionを絶対指定にして固定配置したもの。肝は、bodyとhtml部分にoverflow:hiddenを設定するところかな。
- html , body {
- background-color: #fff;
- color: #333;
- overflow: hidden;
- height: 100%;
- }
- #wrapper {
- border: solid 1px;
- margin: 0 auto;
- position: relative;
- width: 800px;
- height: 100%;
- }
html,bodyと
#wrapperに
height:100%を指定することで
#wrapperのボックスは縦幅いっぱいに広がります。
また、
#wrapperに
position: relativeを指定することでヘッダとフッタ部分の絶対配置の基準にします。
ヘッダとフッタに関しては
- #header {
- background-color: #5f5;
- position: absolute;
- top: 0;
- left: 0;
- width: 785px;
- height: 80px;
- z-index: 2;
- }
- #footer {
- background-color: #ccc;
- position: absolute;
- bottom: 0;
- left: 0;
- width: 785px;
- height: 50px;
- z-index: 2;
- }
絶対配置をすること、
z-indexをコンテンツのボックスより大きく設定することと、コンテンツ部分のスクロールバーを表示するために右側に余白を設けています。
(余白と書いていますが、幅をコンテンツ部分より15pxほど短くすることで余白としています)
最後にコンテンツ部分です。
- #mainContents {
- background: #55f;
- overflow: auto;
- position: relative;
- margin-left: 160px;
- width: 640px;
- height: 100%;
- z-index: 1;
- }
- #mainContentsInner {
- padding: 105px 0 50px;
- }
メインコンテンツ部分は、ふたつのボックスからなります。
まず、コンテンツを表示する部分。ここに
overflow: autoを設定し、溢れた物をスクロールできるようにします。
そして内包するボックスに対して
paddingを設定します。
この値は、上下のヘッダ、フッタ部分にかぶらないように余白を設定しているものです。
(今回のサンプルではヘッダ、フッタと同じ手法で左側にメニューをおいているため、左側にも余白を取っています)
コメント
1 - 通りすがり さん
サンプルについてですが、画面が小さい時に横スクロールバーが表示されないのは仕様でしょうか?→ 結果:肝心の縦スクロールバーも表示されない
(ff2.0, ie7, ie6ともに)
2008年1月18日 11:34
2 - えど さん
>>通りすがりさん
コメントありがとうございます。
そうですね、これはサンプルの仕様です。
この固定の方法は、htmlおよびbody部分に「overflow: hidden」を使い、
全体をひとつのdiv要素で括っています。
その中の1要素にスクロールバーを表示(overflow: auto)しているので
このような挙動になっています。
そのため、ウィンドウが小さい場合でも、中のdiv要素自体は縮小されないため
スクロールバーが出ていない状態になっています。
2008年1月18日 12:08