CSSで3カラムレイアウトを実現する
3カラムレイアウトは、これまでの2カラムレイアウトの応用で実現することができます。基本的に使用するテクニックはこれまでと同じです。
フロート型:3カラムレイアウト
まず、フロート型で、メイン(div#main)、サブ1(div#sub1)、サブ2(div#sub2)の3カラムレイアウトを実現する方法をみてみましょう。
(X)HTMLのソースでは、メイン、サブ1、サブ2の順で出現します。
<div id="container"> <div id="wrapper"> <div id="main">メイン</div> <div id="sub1">サブ1</div> </div> <div id="sub2">サブ2</div> </div>
3カラムレイアウトをフロート型で実現する方法もさまざまですが、今回は次のようにします。
div#container { position: relative; /* 基準位置の座標(0 , 0)を提供 } div#main { position: relative; width: 70%; top: 0; left: 20%; width: 60%; background-color: red; } div#sub1 { position: absolute; top: 0; left: 0; width: 20%; background-color: blue; } div#sub2 { position: absolute; top: 0; right: 0; width: 20%; float: right; background-color: blue; } div#footer { width: 100%; background-color: black; color: white; }
仕組みとしては、図14のように、メインを右フロート、サブ1を左フロートさせ、両者をラッパー(div#wrapper)で囲みます。さらに、ラッパーを左フロート、サブ2を右フロートさせ、全体をコンテナで囲みます。
ポジショニング型:3カラムレイアウト
ポジショニング型で3カラムレイアウトを実現する方法もさまざまですが、今回は、メインコンテンツを相対配置、サブ1とサブ2を絶対配置で指定する方法を見てみましょう。
(X)HTMLソースは、メイン、サブ1、サブ2をコンテナで囲んで記述します。
<div id="container"> <div id="main">メイン</div> <div id="sub1">サブ1</div> <div id="sub2">サブ2</div> </div>
CSSは、次のように指定します。今回は、サブ1とサブ2を絶対配置にします。この場合も、2カラム同様、絶対配置する内容が絶対配置しない内容の高さを超えた場合、フッターと重なって表示されるという点に注意してください。
div#container { position: relative; /* 基準位置の座標(0, 0)を提供 */ width: 100%; } div#main { position: relative; /* 座標(0, 20%)に相対配置 */ width: 70%; top: 0; left: 20%; width: 60%; } div#sub1 { position: absolute; /* 座標(0, 0)に絶対配置 */ top: 0; left: 0; width: 20%; } div#sub2 { position: absolute; /* 座標(0, 0)に絶対配置 */ top: 0; right: 0; width: 20%; }
このCSSレイアウトのポイントは次のとおりです。
- コンテナに「position: relative」を指定し、ポジショニングの基準位置(座標[0,0])を提供する。コンテナの幅として、ここでは「width: 100%」を指定しておく
- メインコンテンツに「position: relative」を指定し、「top: 0」「left: 20%」を指定する。これにより、メインコンテンツが座標(0, 20%)に相対配置される。さらに「width: 60%」を指定しておく
- サブコンテンツ1に「position: absolute」を指定し、「top: 0」および「left:0」を指定する。これによりサブコンテンツ1が座標(0, 0)に絶対配置される。幅は「width: 20%」とする
- サブコンテンツ2に「position: absolute」を指定し、「top: 0」および「right: 100%」(あるいは「left: 80%」でも可)を指定する。これによりサブコンテンツ1が座標(0, 100%)に絶対配置される。幅は「width: 20%」とする
まとめ
一般的によく見られるような比較的単純なレイアウトであれば、clearプロパティやclearfixを使用することで、フッタの重なりをコントロールすることができる分フロート型が向いています。横配置の得意なフロート型に対し、ポジショニング型は、縦配置が得意だと言えるでしょう。自分より後の要素も自由に配置をコントロールすることができますが、フッタの重なりには注意が必要です。
今回紹介したフロート型、およびポジショニング型のレイアウトテクニックは、どちらも、(X)HTMLのソース上では、メインのコンテンツを先に記述し、サブコンテンツは後から記述することができます。CSSによるクロスブラウザな表示も大切ですが、まずは(X)HTMLの構造を考え、内容の重要なものから先に記述することが大切です。
これにより、CSSが利用できない環境であっても、重要な内容を先に伝えることができ、SEO上でも有効なコンテンツとなるのです。これまでの連載で述べてきたように、見た目はCSSで後から自由に変更することができます。