現在地: Home » 初級ホームページ作成講座:目次 » 速習CSSレイアウト解説:position3カラム

CSS
#wrapper{
padding:0px;
margin:0px auto;
width:800px;
}
HTML
<div id="wrapper"></div>
上記指定が完了したら、HTMLの<div id="container"></div>の中にボックス【div】を6つ入力します。
<div id="wrapper"> <div> </div> <div> </div> <div> </div> <div> </div> <div> </div> <div> </div> </div>+++++wrapperの終り
CSS
#header{
padding:0px;
margin:0px;
height:150px;++++++++++高さのみ指定
}
HTML
<div id="wrapper"> <div id="header"> </div> <div></div> <div></div> <div></div> <div></div> <div></div> </div>++++++++++wrapperの終り

なぜ?囲むのか。下記サンプルのような場合を想定しています。【position:absolute】は他のボックスとは独立して配置している点に注意が必要です!
CSS
#container{
position:relative;
width:100%;
}
HTML
<div id="wrapper"> <div id="header"> </div> <div id="container"> <div> </div> <div> </div> <div> </div> </div>+++++containerの終り <div> </div> </div>+++++wrapperの終り

#containerを指定しない場合のサンプル表示 *サンプルは左サイドバーですが同じことです。

CSS
#left_sidebar{
padding:0px;
margin:0px;
width:180px;
position:absolute;
left:0px;
top:0px;
}
HTML
<div id="wrapper"> <div id="header"> </div> <div id="container"> <div id="left_sidebar"> </div> <div> </div> <div> </div> </div>+++++containerの終り <div> </div> </div>+++++wrapperの終り

なぜ【幅440px】なのか?
左サイドバーを【幅180px】としたという事は、通常の場合【右サイドバーも180px】にする事が多いです。よって、全体の【幅800px】から両サイドバー分の【幅360px】を引いたものが【440px】というわけです。
通常はそうなのですが、【左サイドが200px】【右サイドが150px】でもOKです。その場合は【800px−200px−150px=450px】がコンテンツ部分の幅になります。
因みに、今回は【余白】は全く考えていませんが、必要な場合は全体の幅(ココでは800px)を超えないように指定して下さい。
CSS
#contents{
padding:0px;
margin:0px;
width:440px;
position:absolute;
top:0px;
left:180px;
}
HTML
<div id="wrapper"> <div id="header"> </div> <div id="container"> <div id="left_sidebar"> </div> <div id="contents"> </div> <div> </div> </div>+++++containerの終り <div> </div> </div>+++++wrapperの終り

【position:absolute】で左方向に620pxとしたのは、左サイドバーの幅180pxとコンテンツ部分の幅440pxをたしたものです。
CSS
#right_sidebar{
padding:0px;
margin:0px;
width:180px;
position:absolute;
left:620px;
top:0px;
}
HTML
<div id="wrapper"> <div id="header"> </div> <div id="container"> <div id="left_sidebar"> </div> <div id="contents"> </div> <div id="right_sidebar"> </div> </div>+++++containerの終り <div> </div> </div>+++++wrapperの終り

さて!ここで問題が発生します。繰り返しになりますが【position:absolute】で指定したボックスは他のボックスとは独立した存在(配置)でしたね。
取りあえず、通常の方法で【フッター】を配置したサンプルを見てください。その方が解りやすいと思います。
通常配置サンプル*サンプルは左サイドバーですが同じことです。

CSS
#footer{
padding:0px;
margin:0px;
text-align:center;
}
HTML
<div id="wrapper"> <div id="header"> </div> <div id="container"> <div id="left_sidebar"> </div> <div id="contents"> </div> <div id="right_sidebar"> </div> </div>+++++containerの終り <div id="footer"> </div> </div>+++++wrapperの終り
では、解決策を2パターン
もっとも簡単ですが、人によっては嫌うレイアウトかも知れません。【#footer】を【#contents】の中に入れてしまいます!
CSS
#footer{
padding:0px;
margin:0px;
text-align:center;
}
HTML
<div id="wrapper"> <div id="header"> </div> <div id="container"> <div id="left_sidebar"> </div> <div id="contents"> <div id="footer"> </div> </div>+++++contentsの終り <div id="right_sidebar"> </div> </div>+++++containerの終り </div>+++++wrapperの終り

以上で完成です。好き嫌いが出そうですね!
一応、普通のタイプのように出来ますが、注意が必要です!
以上の点に注意して進みます。今までのCSSの指定を若干変えます。
意味が解るでしょうか?【#contents】部分の【position】指定を削除した事により【#contents】は通常のボックス配置にもどりました。【#left_sidebar】【#right_sidebar】はそのまま【position:absolute】を指定してありますから、重ならないように通常の【margin】指定で左側に【180px】の余白を設けたわけです。
また、【#contents】が通常のボックス配置にもどった事により、【#footer】は【#contents】を基点として上手く配置できるわけです。
最後に、【#left_sidebar】【#right_sidebar】の高さは【#contents】の高さを超えてはいけない事を忘れないで下さいね。
CSS
#contents{
padding:0px;
margin:0px 0px 0px 180px;
width:440px;
}
#footer{
padding:0px;
margin:0px;
text-align:center;
}
HTML
<div id="wrapper"> <div id="header"> </div> <div id="container"> <div id="left_sidebar"> </div> <div id="contents"> </div> <div id="right_sidebar"> </div> </div>+++++containerの終り <div id="footer"> </div> </div>+++++wrapperの終り

因みにサイドバー部分のボリュームが多くなるとこうなります

以上。