CSSにおける2カラムレイアウトの構成
次のような2カラムレイアウトを作成してみましょう:
まずはページの基本構造を作成します:
<div id="wrapper">
<div id="header">
header
</div>
<div id="container">
<div id="content">
content
</div>
<div id="sidebar">
sidebar
</div>
</div>
<div id="footer">
footer
</div>
</div>
次に、ラッパーにスタイルを適用して画面中央に配置します:
#wrapper {
width: 1000px;
margin: 30px auto;
border: 1px solid black;
}
次に、ヘッダーとフッターのスタイルを設定します:
#header {
height: 200px;
border: 1px solid black;
}
#footer {
height: 200px;
border: 1px solid black;
}
ご覧の通り、ヘッダーとフッターに高さを設定しています。 これは、このレイアウトではコンテンツがないためです。 コンテンツがある場合は、高さを設定すべきではありません - 高さはコンテンツによって形成されます。
また、幅を設定していない点にも注意してください。 ヘッダーとフッターはブロック要素であるため、 幅は自動的にラッパーの幅と同じになります。
次に、テキストが境界に接しないように
paddingを設定しましょう:
#header {
height: 200px;
padding: 20px;
border: 1px solid black;
}
#footer {
height: 200px;
padding: 20px;
border: 1px solid black;
}
しかし、paddingがあると、ブロックのサイズに悪影響を及ぼします
- 指定したサイズよりも大きくなってしまいます。
すべてのブロックの動作を変更して、paddingと境界線が
ブロックを拡張しないようにしましょう:
* {
box-sizing: border-box;
}
次に、コンテンツとサイドバーを同じ行に配置する必要があります。 フレックスボックスを使用して実現しましょう:
#container {
display: flex;
}
コンテンツとサイドバーに幅を指定します。 この時、それらの幅の合計はラッパーの幅と等しくなければなりません:
#content {
width: 800px;
}
#sidebar {
width: 200px;
}
サイドバーとコンテンツの間に余白を作りたいとします。
この場合、サイドバーにmarginを設定する必要があります。
そのためには、誰かからこのmargin用の幅を削る必要があります。
コンテンツから削り、それに応じてコンテンツの幅を減らしましょう:
#content {
width: 780px;
}
#sidebar {
width: 200px;
margin-right: 20px;
}
次に、要素にコンテンツがないため、高さを追加しましょう。 一つの要素に高さを追加するだけで十分です。 なぜなら、もう一方のフレックス要素は高さに合わせて調整されるからです(なぜでしょう?)。 コンテンツに高さを設定しましょう:
#content {
width: 780px;
height: 700px;
}
#sidebar {
width: 200px;
margin-right: 20px;
}
コンテンツとサイドバーに残りのスタイルを追加しましょう:
#content {
width: 780px;
height: 700px;
padding: 20px;
border: 1px solid black;
}
#sidebar {
width: 200px;
margin-right: 20px;
padding: 20px;
border: 1px solid black;
}
以上で、レイアウトは完成です。すべてのコードをまとめましょう:
<div id="wrapper">
<div id="header">
header
</div>
<div id="container">
<div id="sidebar">
sidebar
</div>
<div id="content">
content
</div>
</div>
<div id="footer">
footer
</div>
</div>
* {
box-sizing: border-box;
}
#wrapper {
width: 1000px;
margin: 30px auto;
border: 1px solid black;
}
#header {
height: 200px;
padding: 20px;
border: 1px solid black;
}
#container {
display: flex;
}
#content {
width: 780px;
height: 700px;
padding: 20px;
border: 1px solid black;
}
#sidebar {
width: 200px;
margin-right: 20px;
padding: 20px;
border: 1px solid black;
}
#footer {
height: 200px;
padding: 20px;
border: 1px solid black;
}