ショッピングサイトなんか作る場合は、3カラムで中央可変っていうのもいいかもしれないですね。最近は画面幅広がってきてますし。
参考にさせていただいたのはこちら
3カラムレイアウトで、中央を可変にする(リキッドレイアウト)
ありがとうございます。
なんか説明を読んでもよくわからないんですが、floatしたボックスのマージンの値を自身の幅以上にマイナスにすると、HTMLの記述順で上に書かれているボックスに重なる、という現象を利用しているようです。
図にすることこんな感じですか?よくわかりません。
HTML
<div id="container"> <div id="header"> <h1>見出し</h1> <!--/header--></div> <div id="content"> <div id="maincontent"> <h2>メインコンテンツ</h2> <p>メインコンテンツが入ります。メインコンテンツは横幅がリキッドです。</p> <!--/maincontent--></div> <!--/content--></div> <div id="sidebar1"> <h3>サイドバー1</h3> <p>サイドバー1が入ります。サイドバー1は横幅が固定です。</p> <!--/sidebar1--></div> <div id="sidebar2"> <h3>サイドバー2</h3> <p>サイドバー2が入ります。サイドバー2は横幅が固定です。</p> <!--/sidebar2--></div> <div id="footer"> <p>フッター</p> <!--/footer--></div> <!--/container--></div>
CSS
このとき、margin、paddingなどは全てリセットされているとします。
#container { width: 100%; background: #fff; margin: 0 auto; text-align: left; } #header { background: #ddd; padding: 10px; } #content { float: left; width: 100%; } #maincontent { margin: 0 180px 0 200px; padding: 15px 10px; } #sidebar1 { float: left; width: 200px; background: #ebebeb; margin-left: -100%; padding: 15px 0; } #sidebar2 { float: right; width: 180px; background: #ebebeb; margin-left: -180px; padding: 15px 0; } #footer { clear: both; background: #ddd; padding: 10px; }
ポイント1
1つ目はメインコンテンツ部分です。
メインコンテンツは div 二重がけになっています。これは外側の div で float と横幅を、内側の div でマージン、パディングを指定しています。div を分ける理由は、可変にするために横幅を100%にしているので、同時にマージン、パディングできないからです。
ポイント2
ポイントの2つ目はサイドバー部分です。
左に寄せたい div に margin-left: -100%; を、右に寄せたい div に margin-left: (自身の横幅); を指定しています。これが、先ほどわからないなりに図にしていた『floatしたボックスのマージンの値を自身の幅以上にマイナスにすると、HTMLの記述順で上に書かれているボックスに重なる』現象ですね。
右に寄せたい div も margin-left: -100%; でいいんじゃないの?と思ったんですが、この指定だとこいつIE6でどっかいっちゃうみたいです。
IE6用注意
で、IE6用に注意がひとつ。
IE6では、左に寄せたい div の margin-left: -100%; 指定が一番外側の div(今回なら #container)の横幅に連動するみたいです。
つまり、#container の横幅が 90% だとしたら、ハックを使ってIE6用に記述を追加しなければいけません。
#sidebar1 { float: left; width: 180px; background: #ebebeb; margin-left: -100%; _margin-left: -90%; padding: 15px 10px; }
最近のコメント