テーブルを使用せず、スタイルシートだけを使用した2カラムレイアウトの紹介。
スタイルシートを利用した2カラムレイアウトの方法はいろいろありますが、画面の左側にナビゲーションを配置する場合に何が一番よい方法なのかは悩むところです。 このページでは次の目的に着目してレイアウトの方法を紹介します。
なお、レイアウトはブラウザの標準モードでのレンダリングを想定しています。互換モードでは正しく表示されない可能性があります。
また、絶対ということはないので、あくまでも使用はご自分の責任でお願いします。
レイアウトの対象とするhtmlは次のものを使用します。
では、このhtmlを十分な画面サイズがある場合に、全体の幅を500pxでセンタリングし、ナビゲーションの幅を150pxとして表示する例をパターン別に紹介します。
ナビゲーション部分の幅:可変、メインコンテンツ部の幅:可変
将来的には古いバージョンのブラウザの使用は減ると思われるので、モダンブラウザ向けの方法です。
この方法でブラウザの幅を減らしていくと、最終的にはナビゲーションが下に回り込むので、小さな画面でもストレスはまったくありません。
IE6などの古いブラウザでは横幅は画面いっぱいに広がり、ナビゲーションは下に回り込みませんが、さほど違和感はないとおもいます。
.contents
はmax-width
で幅を指定し、width
を100%
とします。min-width
は5em
とします。
ブロック要素の配置にはfloat:right
を使用しています。これによりメインコンテンツを先に記述することができます。
.main
と.navi
はmax-width
で幅を指定し、width
に親要素のサイズを元にそれぞれカラムの%を求めて設定します。このとき、IE6は%の計算に誤差があるので、片方を0.01引いた値とします。min-width
はお好みですが、5em
とします。
古いブラウザの互換性を考えない場合はwidth
の指定は100%
でもかまいません。
幅の指定をwidth
に直接指定するのではなく、max-width
に絶対値、width
に相対値で指定をするだけです。
ナビゲーション部分の幅:固定、メインコンテンツ部の幅:固定
ブラウザの幅に関係なく同じように表示したい場合に使用します。デザイン性を重視したページではこのレイアウトがもっとも多く使われます。 印刷された紙をイメージすればわかりやすいと思いますが、画面サイズにまったく影響を受けません。画面を小さくすると横スクロールバーが表示されます。
.outline
のwidth
に幅を指定します。幅はpx
等の絶対値指定で行います。
.main
はwidth
で幅を指定し、float:right
を指定します。
.navi
はwidth
で幅を指定し、float:left
を指定します。
ナビゲーション部分の幅:固定、メインコンテンツ部の幅:可変
若干余計なタグを必要としますが、通常の2段レイアウトとほぼ同じレイアウトとなります。 ナビゲーションの幅よりもブラウザの幅を小さくすると古いブラウザではメインコンテンツ部分は消えてしまいます。
メインコンテンツをdiv
要素でラッピングし、class="main_wrapper"
とします。
.main_wrapper
のmargin
にネガティブマージン(マイナス値)でナビゲーションの幅を指定します。このとき、IE6のためにさらに4px引いた値を設定します。
.main
のmargin
にナビゲーションの幅を指定します。
.navi
のwidth
に幅を指定します。
ナビゲーション部分の幅:固定、メインコンテンツ部の幅:可変
float版とほぼ同様ですが、メインコンテツの高さがナビゲーションより低いとフッターの位置がずれてしまいます。
その場合は、メインコンテンツのpadding-bottom
を使用して調整する必要があるので煩雑ですが、float版のように余計なタグは必要ありません。
.contents
にposition:relative;
を指定し絶対配置の基準位置をcontentsの左上にします。
.main
のmargin
にナビゲーションの幅を指定し、ナビゲーションと重ならないようにします。
.navi
にposition:absolute;
とtop:0px;
を指定して基準位置に移動します。またwidth
に幅の指定を行います。
このときleft:0px;
を設定すると、IE6では正しく表示されません。
ナビゲーション部分の幅:可変、メインコンテンツ部の幅:可変
そもそもナビゲーションを右に配置するのが一番きれいな形だとおもうので最後に記載しておきます。 回り込み時に左に寄るので一番違和感がありません。幅を狭くして比較してみてください。
最初に紹介した方法のfloat指定をleftにするだけです。
幅を可変にする場合は親要素の幅や子要素の幅をpx
等で絶対値指定した場合や、親要素にoverflow:hidden;
等を指定した場合はうまくいきませんので、ご注意ください。
CSSハックを使用しないという観点からclearfix等は使用していません。