height100%のレイアウト覚書
条件:
コンテンツがブラウザウィンドウの高さからあふれる場合は、
footer要素がコンテンツの下につく。
コンテンツがブラウザウィンドウの高さにおさまる場合は、
footer要素がウィンドウの下部につく。
html:
body直下のタグの構造は以下のような感じ。
<div id="container"> <div id="conatiner_inner"> ... </div> </div> <div id="footer"> ... </div>
css:
html、bodyのheightは100%。
#containerにはmin-height:100%を指定。
#footerにheightを指定し(ピクセル指定)、
その分だけ#containerのmargin-topにネガティブマージンを指定する。
例えば、
#footerのheightが50pxなら、
#containerにmargin-top:-50pxを指定する。
ただし、#footerの上下にborderをつけている場合などは、
スクロールバーが出ないようにmargin-topの値を調整する。
#container_innerのpadding-topに、
#containerのmargin-topで引いた分のピクセルを足して、
ネガティブマージンの指定により隠れてしまったコンテンツを見えるようにおく。
上の例の場合は、
padding-top:50px;
border等の指定によりスクロールバーが出てしまう場合に、
この値も調整する必要があるかも。
これにより、
コンテンツがあふれたときは、#footerがウィンドウの外に追い出され、
コンテンツがおさまるときは、#footerがウィンドウの下部につく。
IE6の場合
IE6の場合は、min-heightは使えないので、
#conatinerに
height:100%
を指定する。
#footerに上下のborderを指定している場合、
ほかのブラウザと、スクロールバーが出なくなる#containerのネガティブマージンの値が変わる可能性がある。
その場合は、IE6のみ別指定にする。
(いずれも、セレクタハック(*html)などでIE6だけに適用されるようにしておく。)
IE6は、
コンテンツがブラウザウィンドウからあふれる場合は、
コンテンツの高さをheight100%と解釈。
コンテンツがブラウザウィンドウにおさまる場合は、
ブラウザウィンドウの高さをheight100%と解釈するので、
min-heightが使えなくても、上記の方法で何とかなる。