<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
    <title>レイアウト講座 - CSS HappyLife ZERO</title>
    <link rel="alternate" type="text/html" href="http://css-happylifezero.com/layout/" />
    <link rel="self" type="application/atom+xml" href="http://css-happylifezero.com/layout/../feed/layout.xml" />
    <id>tag:css-happylifezero.com,2009-11-10:/layout//7</id>
    <updated>2010-01-17T06:43:49Z</updated>
    
    <generator uri="http://www.sixapart.com/movabletype/">Movable Type Commercial 4.261</generator>

<entry>
    <title>01. はじめに</title>
    <link rel="alternate" type="text/html" href="http://css-happylifezero.com/layout/basic_2column_fixed/01.shtml" />
    <id>tag:css-happylifezero.com,2009:/bug//6.191</id>

    <published>2009-06-24T10:44:24Z</published>
    <updated>2010-01-11T15:21:24Z</updated>

    <summary>完成したサンプルと、まえがき的な事を書いてます。</summary>
    <author>
        <name>admin</name>
        
    </author>
    
        <category term="基本的な2カラムレイアウト" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="ja" xml:base="http://css-happylifezero.com/layout/">
        <![CDATA[<p>一発目のレイアウト講座は、とても簡単な2カラムレイアウトから行きます。<br />
ちなみに固定幅です。</p>

<p>まずは、この基本的な2カラムレイアウトを読み進めるとどんなのが出来上がるのか、実際に作成されたサンプルサイトを見てください。（別窓とかで開きながら見てもらうと分かりやすいかも知れません）</p>

<ul class="example">
<li class="view"><a href="sample/">サンプルサイトを見る</a></li>
</ul>

<p>見てもらうと上から、ヘッダー、メイン、サイドバー、フッターで構成された簡単な2カラムレイアウトが確認出来ます。<br />
各部の呼び方は不要かもしれませんが念のため、以下のような感じで読んでます。</p>

<p><img src="/img/layout/basic_2column_fixed/area.jpg" alt="各部の呼び方" /></p>

<p>んで、このレイアウトを作成するのにポイントとなってくるのは、当然ですが段組みになっているメインとサイドバー部分です。<br />
通常、ブロックレベル要素は横に並ばないため段組みにはならないので、2段組みになるようCSSを指定する必要が有ります。</p>

<p>このために使うプロパティが「<a href="/property/float.shtml">floatプロパティ</a>」です。このプロパティの指定をする事で、指定された要素は可能な限り左（値が<code>left</code>の場合）に寄り、後続する内容は可能な限りその側面に流し込まれます。<br />
これにより、メインに<code>flaot: left;</code>の指定をすると、後続するサイドバーは右側に流し込まれ、2カラムレイアウトになります。<br />
この際、親要素よりメインとサイドバーの横幅が大きいと2カラムにならず、いわゆるカラム落ちの状態になってしまうので横幅には注意が必要です。</p>

<p>・・・と、何だかいきなり訳の分からない感じかもしれませんが、2カラムに限らず、CSSでレイアウトを行う以上必須になってくるのがfloatプロパティです。</p>

<p>では、まずはHTMLから作成していきます。</p>]]>
        
    </content>
</entry>

<entry>
    <title>02. HTMLを書く</title>
    <link rel="alternate" type="text/html" href="http://css-happylifezero.com/layout/basic_2column_fixed/02.shtml" />
    <id>tag:css-happylifezero.com,2010:/layout//7.316</id>

    <published>2010-01-10T16:01:44Z</published>
    <updated>2010-01-11T09:44:27Z</updated>

    <summary>HTMLファイルが無ければCSSを当てれないので、まずはHTMLファイルを準備します。ここでマークアップ済みのHTMLファイルもDL出来ます。</summary>
    <author>
        <name>admin</name>
        
    </author>
    
        <category term="基本的な2カラムレイアウト" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="ja" xml:base="http://css-happylifezero.com/layout/">
        <![CDATA[<p>
CSSによるレイアウトをする以上、必須になってくるのがHTMLです。<br />
という事で、CSSに入る前に基本的な2カラムレイアウトを作成するのに必要なHTMLファイルを用意します。
</p>

<pre class="xhtml">
<code>&lt;div id=&quot;page&quot;&gt;

&lt;div id=&quot;header&quot;&gt;
&lt;!-- / #header --&gt;&lt;/div&gt;


&lt;div id=&quot;contents&quot;&gt;

&lt;div id=&quot;main&quot;&gt;
&lt;!-- / #main --&gt;&lt;/div&gt;

&lt;div id=&quot;sub&quot;&gt;
&lt;!-- / #sub --&gt;&lt;/div&gt;

&lt;!-- / #contents --&gt;&lt;/div&gt;


&lt;div id=&quot;footer&quot;&gt;
&lt;!-- / #footer --&gt;&lt;/div&gt;

&lt;!-- / #page --&gt;&lt;/div&gt;</code>
</pre>

<p>
レイアウトに関する要素のみだと上記のような構造になっており、このレイアウト用のdiv要素にスタイルを当てていきます。<br />
HTMLの構造を見てもらうと、<code>div id="contents"</code>内に<code>div id="main"</code>と<code>div id="sub"</code>が内包されているのが確認出来ます。この<code>div id="contents"</code>が無くとも2カラムにする事は可能ですが、デザイン性を持たせた際に必要になったり、レイアウト崩れやバグの誘発を防ぐために必要になってきます。<br />
また、2カラムを作成するだけなら<code>div id="page"</code>は不要な場合も有りますが、全体の横幅を決めたりセンタリングするのに使うので実用性を考えると必要になってきます。
</p>
<p>
このように、カラムレイアウトを作成するにはHTMLの構造が重要で構造が滅茶苦茶だと思うように組めなかったり後から追加したりと大変です。また、デザインによってはdiv要素を追加したりする必要が有りますが、今回程度のデザインなら追加する必要は有りません。
</p>
<p>
んでは、構造がざっくりと分かった所で、スタイルが当たる前のマークアップ済みHTMLファイルとCSSファイルが入っている一式を下記に用意していますので、ダウンロードしてお使い下さい。
</p>

<ul class="example">
<li class="view"><a href="sample_01/">HTMLを見る</a></li>
<li class="dl"><a href="sample_01.zip">HTMLファイルとか一式をDL</a></li>
</ul>

<p>
ダウンロードしたzipファイルを解凍すると「sample_01」というフォルダが出来ます。その中に「index.html」とcssフォルダが入ってますので、まずはindex.htmlをブラウザで表示させつつ、テキストエディタ（やオーサリングツール）でも開いて下さい。<br />
ブラウザで見ると、上記<a href="sample_01/">HTMLを見る</a>のように、CSSが当たっていない状態で表示されます。
</p>
<p>
これでHTMLファイルの準備が完了したので、次からCSSを書き始めます。
</p>]]>
        
    </content>
</entry>

<entry>
    <title>03. デフォルトスタイルをリセット</title>
    <link rel="alternate" type="text/html" href="http://css-happylifezero.com/layout/basic_2column_fixed/03.shtml" />
    <id>tag:css-happylifezero.com,2010:/layout//7.317</id>

    <published>2010-01-11T07:56:37Z</published>
    <updated>2010-01-11T09:45:19Z</updated>

    <summary>ブラウザがデフォルトで持っているスタイルをリセットします。</summary>
    <author>
        <name>admin</name>
        
    </author>
    
        <category term="基本的な2カラムレイアウト" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="ja" xml:base="http://css-happylifezero.com/layout/">
        <![CDATA[<p>HTMLファイルの準備が完了したら、ブラウザ側で予め当たっているデフォルトスタイルをリセットして差異を埋める必要が有ります。<br />
そのために、ここではボクが普段使っている<a href="/dl/new_site/hirasawa_default_css/">default.css</a>を使ってリセットします。</p>

<p>このdefault.cssは先ほどダウンロードした一式に入っていますので、これを適用させます。<br />
適用させるには、head要素内のlink要素によってCSSファイルを読み込んでいる部分（18行目）のパスを以下のように「_」から「.」に変更します。</p>

<pre class="xhtml">
<code>&lt;link rel=&quot;stylesheet&quot; href=&quot;_/css/import.css&quot; type=&quot;text/css&quot; media=&quot;all&quot; /&gt;
↓↓↓↓
&lt;link rel=&quot;stylesheet&quot; href=&quot;./css/import.css&quot; type=&quot;text/css&quot; media=&quot;all&quot; /&gt;</code>
</pre>

<p>これで、default.cssが適用されたのが確認できるかと思います。<br />
なお、default.css以外のCSSファイルには特に指定をしていないため、これと言った変化は有りませんが、import.cssを通して他のCSSファイルも実際には読み込まれています。</p>

<ul class="example">
<li class="view"><a href="sample_02/">default.cssが適用された状態</a></li>
</ul>

<p>ここまで完成したら、いよいよレイアウト部分に入ります。</p>]]>
        
    </content>
</entry>

<entry>
    <title>04. 全体のセンタリングとヘッダーの作成</title>
    <link rel="alternate" type="text/html" href="http://css-happylifezero.com/layout/basic_2column_fixed/04.shtml" />
    <id>tag:css-happylifezero.com,2010:/layout//7.318</id>

    <published>2010-01-11T08:33:43Z</published>
    <updated>2010-01-11T09:46:25Z</updated>

    <summary>2カラムの前に全体をセンタリングさせ、ヘッダーを完成させます。</summary>
    <author>
        <name>admin</name>
        
    </author>
    
        <category term="基本的な2カラムレイアウト" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="ja" xml:base="http://css-happylifezero.com/layout/">
        <![CDATA[<p>
デフォルトスタイルのリセットが完了したら、大枠から徐々にスタイルを当てていきます。
</p>

<h3>全体をセンタリング</h3>
<p>
全体をセンタリングさせるには、全体を囲っているdiv要素の<code>#page</code>に、下記のように<a href="/property/width.shtml">widthプロパティ</a>で横幅の指定をし、<a href="/property/margin.shtml">marginプロパティ</a>で左右のマージンを<code>auto</code>と指定します。
</p>
<p>
この指定は「style.css」の30行目辺りに#pageとコメントが有るのでその直後にスタイルを書くようにします。
</p>

<pre class="css">
<code>/* --------------------------------------------------------
  #page
-------------------------------------------------------- */
#page {
  width: 860px;
  margin: 0 auto;
  text-align: left;
}</code>
</pre>

<p>
これで全体がセンタリングされます。
</p>
<p>
なお、IE5.xやIE6の互換モードでは、左右マージンの値を<code>auto</code>にしてもセンタリングされませんが、<code>text-align: center;</code>の指定をするとブロックレベル要素がセンタリングされるバグが有り、これを利用してセンタリングさせます。<br />
具体的には、body要素に<code>text-align: center;</code>の指定をすると、子要素である<code>#page</code>がセンタリングされます。このままだとテキストもセンタリングされてしまうので、<code>text-align: left;</code>の指定をする事でテキストを左寄せに戻します。<br />
IE5.xやIE6の互換モードは対応ブラウザに含めていないので、別にいいんですが、最低限の対応として一応行っています。（この部分の内容はHTML5でいうとaside要素でマークアップ出来ますね。）
</p>

<h3>ヘッダーの作成</h3>
<p>
次はヘッダーに取り掛かります。<br />
ヘッダーのスタイルは「style.css」ではなく「module.css」に書くようにします。
</p>

<pre class="css">
<code>/* --------------------------------------------------------
  #header
-------------------------------------------------------- */
#header {
  margin: 15px 0;
  padding: 15px;
  background: #2e69ab;
  color: #fff;
}

#header h1 {
  font-size: 125%;
}</code>
</pre>

<p>
ヘッダー部分ではデザイン用の指定が有るだけなので、レイアウト関係で特にポイントとなる部分は有りません。<br />
分からないプロパティが有る場合は、「<a href="/property/">プロパティ</a>」から調べて頂ければと思います。
</p>
<p>
ここまでのスタイルを適用させると、下記のようになっています。
</p>

<ul class="example">
<li class="view"><a href="sample_03/">ここまでのサンプルを見る</a></li>
</ul>

<p>
センタリングされ、ヘッダー部分が完成しました。次は、肝となってくる2カラム部分です。
</p>]]>
        
    </content>
</entry>

<entry>
    <title>05. メインとサイドを2カラムに</title>
    <link rel="alternate" type="text/html" href="http://css-happylifezero.com/layout/basic_2column_fixed/05.shtml" />
    <id>tag:css-happylifezero.com,2010:/layout//7.319</id>

    <published>2010-01-11T09:38:42Z</published>
    <updated>2010-01-11T13:28:07Z</updated>

    <summary>キモとなる2カラム部分です。</summary>
    <author>
        <name>admin</name>
        
    </author>
    
        <category term="基本的な2カラムレイアウト" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="ja" xml:base="http://css-happylifezero.com/layout/">
        <![CDATA[<p>
ここまで完成したら、いよいよ2カラム部分に入ります。
</p>

<h3>floatとwidthの指定</h3>
<p>
最初に軽く触れたように、ここで<a href="/property/float.shtml">floatプロパティ</a>の指定をして2カラムを作成していきます。<br />
まずは、<code>#main</code>から指定します。
</p>

<pre class="css">
<code>/* --------------------------------------------------------
  #main
-------------------------------------------------------- */
#main {
  float: left;
  width: 570px;
  background: #ccf;
}</code>
</pre>

<p>
これで、<code>#main</code>が左フロートし、サイドバーとフッターが右側に流し込まれます。<br />
<a href="/property/background.shtml">backgroundプロパティ</a>で背景色の指定をしているのは、横幅を分かりやすくするためです。
</p>

<ul class="example">
<li class="view"><a href="sample_04/">左フロートさせたサンプル</a></li>
</ul>

<p>
続いて、<code>#sub</code>にもfloatプロパティとwidthプロパティの指定をします。
</p>

<pre class="css">
<code>/* -----------------------------------------------------------
  #sub
----------------------------------------------------------- */
#sub {
  float: right;
  width: 270px;
  background: #ccc;
}</code>
</pre>

<p>
<code>#main</code>と同様に<code>#sub</code>も<code>float: left;</code>と指定しても問題ありませんが、<code>left</code>にした場合、メインとサブ間でマージンの調整が必要になってくるので今回は<code>right</code>にしています。
</p>

<ul class="example">
<li class="view"><a href="sample_05/">#subもフロートさせたサンプル</a></li>
</ul>

<p>
これで、だいぶ2カラムっぽくなりましたが、フッターまでメインの横に流し込まれているので、次はソレの対応と諸々の調整やデザインを整えます。
</p>]]>
        
    </content>
</entry>

<entry>
    <title>06. フッターの作成と調整をして完成</title>
    <link rel="alternate" type="text/html" href="http://css-happylifezero.com/layout/basic_2column_fixed/06.shtml" />
    <id>tag:css-happylifezero.com,2010:/layout//7.320</id>

    <published>2010-01-11T10:06:04Z</published>
    <updated>2010-01-17T06:43:49Z</updated>

    <summary>最後にフッターの作成と#contentsの作成、諸々の調整をして完成です。</summary>
    <author>
        <name>admin</name>
        
    </author>
    
        <category term="基本的な2カラムレイアウト" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="ja" xml:base="http://css-happylifezero.com/layout/">
        <![CDATA[<p>
2カラムっぽくなりだいぶ形になってきました。<br />
次は、メインの横に流し込まれてしまっているフッターを調整します。
</p>

<h3>フッターの作成</h3>
<p>
フッターのスタイルはヘッダーと同じく「module.css」に書いていきます。
</p>

<pre class="css">
<code>/* --------------------------------------------------------
  #footer
-------------------------------------------------------- */
#footer {
  clear: both;
  width: 830px;
  margin-bottom: 15px;
  padding: 15px;
  background: #2e69ab;
}

#footer .copyright {
  text-align: center;
  color: #fff;
}</code>
</pre>

<p>
このフッターで一番のポイントとなってくるのが<a href="/property/clear.shtml">clearプロパティ</a>の指定です。この指定をする事で、フッター部分が横に流し込まれずメインの下に表示されます。
</p>
<p>
全体の横幅は<code>860px</code>ですが、フッターは<code>830px</code>と指定しているのは、左右パディングの15pxが足されて実際には<code>890px</code>となってしまうからです。<br />また、一見widthプロパティの指定はいらないように見えますが、指定が無いとIEで不自然な上パディングができてしまいます（<a href="/property/zoom.shtml">zoomプロパティ</a>でも対応出来ます）。
</p>

<ul class="example">
<li class="view"><a href="sample_06/">ここまでのサンプルを見る</a></li>
<li class="view"><a href="sample_06_ie/">IE6, 7でダメなサンプル</a></li>
</ul>

<p>
これで、フッターまで完成しました。もう一息で完成です。
</p>

<h3>#contentsの作成</h3>

<p>
順番的に、メインとサブを作っているタイミングでも良かったんですが、実際に組んでいるとそんなに効率よく書けなかったりして<code>#contents</code>が後になり、その後さらにメインとサブを調整したりするんでここに来て<code>#contents</code>の作成に入ります。
</p>
<p>
最初に見た<a href="sample/">完成形</a>にするために、<code>#contents</code>に必要な指定をします。
</p>

<pre class="css">
<code>/* --------------------------------------------------------
  #contents
-------------------------------------------------------- */
#contents {
  float: left;
  width: 830px;
  margin-bottom: 15px;
  padding: 15px;
  background: #2e69ab;
}</code>
</pre>

<p>
ここで重要なのは<code>float: left;</code>と<code>width: 830px;</code>の指定です。特にfloatプロパティの指定が大切で、この指定が無いと背景色が表示されなくなってしまいます。
</p>
<p>
これらの指定をした状態を実際のブラウザで見ると以下のようになり、ブラウザによって表示が異なってきます。
</p>

<ul class="example">
<li class="view"><a href="sample_07/">ここまでのサンプル</a></li>
</ul>

<p>
このままでは当然ダメなので、メインとサブの調整をします。
</p>

<pre class="css">
<code>/* --------------------------------------------------------
  #main
-------------------------------------------------------- */
#main {
  float: left;
  width: 515px;
  padding: 15px;
  background: #fff;
}

/* -----------------------------------------------------------
  #sub
----------------------------------------------------------- */
#sub {
  float: right;
  width: 270px;
  color: #fff;
}</code>
</pre>

<p>
この調整で、2カラムレイアウトは完成です。
</p>

<ul class="example">
<li class="view"><a href="sample_08/">調整したサンプル</a></li>
</ul>

<h3>メイン内の作成</h3>
<p>
メイン内の各要素にスタイルを当てます。
</p>

<pre class="css">
<code>#main table,#main ol,#main ul,#main dl,#main blockquote,#main pre,#main p {
  margin-bottom: 10px;
}

#main .pageTop {
  clear: both;
  margin: 0;
  text-align: right;
}

#main h2 {
  margin: 0 0 10px;
  padding-bottom: 3px;
  border-bottom: 5px solid #2e69ab;
  font-size: 120%;
}

#main h3 {
  margin: 30px 0 10px;
  padding-left: 5px;
  border-left: 5px solid #2e69ab;
  font-size: 110%;
}</code>
</pre>

<p>
これで、ほぼ全てが完了です。
</p>

<h3>おまけの角丸</h3>
<p>
最後にちょっとしたおまけとして、CSS3を使って角丸を作成します。
</p>

<pre class="css">
<code>/* --------------------------------------------------------
  角丸
-------------------------------------------------------- */
#header,
#footer,
#contents,
#main {
  border-radius: 5px;
  -webkit-border-radius: 5px;
  -moz-border-radius: 5px;
}</code>
</pre>

<p>
border-radiusプロパティの指定をすることで、Firefox3～、Safari3～、Chrome辺りで見た場合に指定された要素の角が丸くなってくれます。<br />
情報に支障を与える訳ではないので、個人サイト等なら使っていけるプロパティかと思います。<br />
ちなみに、Operaは10.5、IEは9で対応予定っぽいです。<br />
角丸の詳細に関しては「<a href="/property/border-radius.shtml">border-radiusプロパティ</a>」でご確認ください。
</p>
<p>
何はともあれ、以上で全て完成となります。<br />
お疲れさまでしたっ！
</p>

<ul class="example">
<li class="view"><a href="sample/">完成したサンプル</a></li>
<li class="dl"><a href="sample.zip">完成したサンプルのダウンロード</a></li>
</ul>

<h3>あとがき的な</h3>
<p>
分かってる人からすると非常に簡単なサンプルでしたが、書いてて思うのは実際にこのレイアウトから説明が必要な人は、この説明でどの程度分かってもらえるのか。もしくは、説明が冗長過ぎてかえって分かり難いのか...等々色んな課題が残ります。<br />
感想等有ればくださいませ。
</p>
]]>
        
    </content>
</entry>

</feed>
