NoteBook > WEBページの2カラムレイアウト

WEBページの2カラムレイアウト

テーブルを使用せず、スタイルシートだけを使用した2カラムレイアウトの紹介。

目次

はじめに

スタイルシートを利用した2カラムレイアウトの方法はいろいろありますが、画面の左側にナビゲーションを配置する場合に何が一番よい方法なのかは悩むところです。 このページでは次の目的に着目してレイアウトの方法を紹介します。

なお、レイアウトはブラウザの標準モードでのレンダリングを想定しています。互換モードでは正しく表示されない可能性があります。
また、絶対ということはないので、あくまでも使用はご自分の責任でお願いします。

目的

  1. 画面の幅が小さい環境でもストレスなく表示できること。→ブラウザの幅を小さくしても横スクロールの必要が少ない。
  2. スタイルシートをOFFにしても、本文が先に表示される。→テキストブラウザや音声ブラウザへの配慮やSEO効果
  3. コンテンツのサイズをあまり意識しなくてもよいこと→コンテンツ量を増やしてもサイズ変更の必要が少ない
  4. ブラウザのバグを利用したCSSハックを使用していない。→バグが修正されても将来も同じように表示される
  5. 古いブラウザでも大幅なくずれがないか、まったく同じに表示される。
  6. javascriptを使用していない。

レイアウトの対象とするhtmlは次のものを使用します。

HTML

では、このhtmlを十分な画面サイズがある場合に、全体の幅を500pxでセンタリングし、ナビゲーションの幅を150pxとして表示する例をパターン別に紹介します。

文章重視の2カラムレイアウト

仕様

ナビゲーション部分の幅:可変、メインコンテンツ部の幅:可変

表示サンプル

2カラムレイアウト表示例
ヘッダー
メインコンテンツ
メインコンテンツ
スライドバーを操作すると幅を変更できます。

説明

将来的には古いバージョンのブラウザの使用は減ると思われるので、モダンブラウザ向けの方法です。
この方法でブラウザの幅を減らしていくと、最終的にはナビゲーションが下に回り込むので、小さな画面でもストレスはまったくありません。
IE6などの古いブラウザでは横幅は画面いっぱいに広がり、ナビゲーションは下に回り込みませんが、さほど違和感はないとおもいます。

スタイルシート

.contentsmax-widthで幅を指定し、width100%とします。min-width5emとします。
ブロック要素の配置にはfloat:rightを使用しています。これによりメインコンテンツを先に記述することができます。
.main.navimax-widthで幅を指定し、widthに親要素のサイズを元にそれぞれカラムの%を求めて設定します。このとき、IE6は%の計算に誤差があるので、片方を0.01引いた値とします。min-widthはお好みですが、5emとします。
古いブラウザの互換性を考えない場合はwidthの指定は100%でもかまいません。
幅の指定をwidthに直接指定するのではなく、max-widthに絶対値、widthに相対値で指定をするだけです。

デザイン重視の2カラムレイアウト

仕様

ナビゲーション部分の幅:固定、メインコンテンツ部の幅:固定

表示サンプル

2カラムレイアウト表示例
ヘッダー
メインコンテンツ
メインコンテンツ
スライドバーを操作すると幅を変更できます。

説明

ブラウザの幅に関係なく同じように表示したい場合に使用します。デザイン性を重視したページではこのレイアウトがもっとも多く使われます。 印刷された紙をイメージすればわかりやすいと思いますが、画面サイズにまったく影響を受けません。画面を小さくすると横スクロールバーが表示されます。

スタイルシート

.outlinewidthに幅を指定します。幅はpx等の絶対値指定で行います。
.mainwidthで幅を指定し、float:rightを指定します。
.naviwidthで幅を指定し、float:leftを指定します。

汎用2カラムレイアウト(float版)

仕様

ナビゲーション部分の幅:固定、メインコンテンツ部の幅:可変

表示サンプル

2カラムレイアウト表示例
ヘッダー
メインコンテンツ
メインコンテンツ
スライドバーを操作すると幅を変更できます。

説明

若干余計なタグを必要としますが、通常の2段レイアウトとほぼ同じレイアウトとなります。 ナビゲーションの幅よりもブラウザの幅を小さくすると古いブラウザではメインコンテンツ部分は消えてしまいます。

html

メインコンテンツをdiv要素でラッピングし、class="main_wrapper"とします。

スタイルシート

.main_wrappermarginにネガティブマージン(マイナス値)でナビゲーションの幅を指定します。このとき、IE6のためにさらに4px引いた値を設定します。
.mainmarginにナビゲーションの幅を指定します。
.naviwidthに幅を指定します。

汎用2カラムレイアウト(position版)

仕様

ナビゲーション部分の幅:固定、メインコンテンツ部の幅:可変

表示サンプル

2カラムレイアウト表示例
ヘッダー
メインコンテンツ
メインコンテンツ
スライドバーを操作すると幅を変更できます。

説明

float版とほぼ同様ですが、メインコンテツの高さがナビゲーションより低いとフッターの位置がずれてしまいます。 その場合は、メインコンテンツのpadding-bottomを使用して調整する必要があるので煩雑ですが、float版のように余計なタグは必要ありません。

スタイルシート

.contentsposition:relative;を指定し絶対配置の基準位置をcontentsの左上にします。
.mainmarginにナビゲーションの幅を指定し、ナビゲーションと重ならないようにします。
.naviposition:absolute;top:0px;を指定して基準位置に移動します。またwidthに幅の指定を行います。
このときleft:0px;を設定すると、IE6では正しく表示されません。

おまけ:ナビゲーションを右に配置した場合の2カラムレイアウト

仕様

ナビゲーション部分の幅:可変、メインコンテンツ部の幅:可変

表示サンプル

2カラムレイアウト表示例
ヘッダー
メインコンテンツ
メインコンテンツ
スライドバーを操作すると幅を変更できます。

説明

そもそもナビゲーションを右に配置するのが一番きれいな形だとおもうので最後に記載しておきます。 回り込み時に左に寄るので一番違和感がありません。幅を狭くして比較してみてください。

スタイルシート

最初に紹介した方法のfloat指定をleftにするだけです。

最後に

幅を可変にする場合は親要素の幅や子要素の幅をpx等で絶対値指定した場合や、親要素にoverflow:hidden;等を指定した場合はうまくいきませんので、ご注意ください。

CSSハックを使用しないという観点からclearfix等は使用していません。