ヘッダ、フッタを固定してみる。

2007年2月 7日 09:30

ひさびさの更新です。
さてさて、今回はとある案件で調べ物をしているときに見つけた手法で、面白かったので自分で作りつつ解説をしてみようと思います。

「ヘッダ、フッタの固定」サンプル

概要を話すと、縦幅100%表示にしたコンテンツボックスの上と下に、positionを絶対指定にして固定配置したもの。肝は、bodyとhtml部分にoverflow:hiddenを設定するところかな。
  1. html , body {
  2. background-color: #fff;
  3. color: #333;
  4. overflow: hidden;
  5. height: 100%;
  6. }
  7. #wrapper {
  8. border: solid 1px;
  9. margin: 0 auto;
  10. position: relative;
  11. width: 800px;
  12. height: 100%;
  13. }

html,body#wrapperheight:100%を指定することで#wrapperのボックスは縦幅いっぱいに広がります。
また、#wrapperposition: relativeを指定することでヘッダとフッタ部分の絶対配置の基準にします。

ヘッダとフッタに関しては
  1. #header {
  2. background-color: #5f5;
  3. position: absolute;
  4. top: 0;
  5. left: 0;
  6. width: 785px;
  7. height: 80px;
  8. z-index: 2;
  9. }
  10. #footer {
  11. background-color: #ccc;
  12. position: absolute;
  13. bottom: 0;
  14. left: 0;
  15. width: 785px;
  16. height: 50px;
  17. z-index: 2;
  18. }

絶対配置をすること、z-indexをコンテンツのボックスより大きく設定することと、コンテンツ部分のスクロールバーを表示するために右側に余白を設けています。
(余白と書いていますが、幅をコンテンツ部分より15pxほど短くすることで余白としています)

最後にコンテンツ部分です。
  1. #mainContents {
  2. background: #55f;
  3. overflow: auto;
  4. position: relative;
  5. margin-left: 160px;
  6. width: 640px;
  7. height: 100%;
  8. z-index: 1;
  9. }
  10. #mainContentsInner {
  11. padding: 105px 0 50px;
  12. }

メインコンテンツ部分は、ふたつのボックスからなります。
まず、コンテンツを表示する部分。ここにoverflow: autoを設定し、溢れた物をスクロールできるようにします。
そして内包するボックスに対してpaddingを設定します。
この値は、上下のヘッダ、フッタ部分にかぶらないように余白を設定しているものです。
(今回のサンプルではヘッダ、フッタと同じ手法で左側にメニューをおいているため、左側にも余白を取っています)

▼EntryMore▼

トラックバックURL

http://css-eblog.com/cgi-bin/mt/mt-tb.cgi/34

コメント

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

コメントを投稿





承認されるまでコメントは表示されません。しばらくお待まちください。