Web力向上ポータル、納得発注道しるべ

CSS基礎講座 CSSで楽しよう!vol.5 レイアウト編(2008/6/2)

グリニッジ有限会社 金井佳子 
記事のカテゴリ: CSS講座 | No Comments

しっかりと下準備が出来た所で、今度は細かい設定の前に、大まかなレイアウトを決めてしまいましょう。
今回使用するのはfloatというプロパティです。苦手だと思われる方も多い、段組に挑戦です。

vol.2 作業の流れ編で作ったHTMLを整形し、これにスタイル指定を行う事にします。まずはこちらを用意して下さい!

CODE:
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  2. <html xmlns="http://www.w3.org/1999/xhtml" lang="ja" xml:lang="ja">
  3. <head>
  4. <meta http-equiv="Content-Type" content="text/html; charset=shift_jis" />
  5. <title>商品ページサンプル</title>
  6. <link rel="stylesheet" type="text/css" href="style.css" />
  7. </head>
  8. <body>
  9.     <img src="cup.jpg" alt="シンプルカップ" />
  10.     <img src="cup2.jpg" alt="シンプルカップ2" />
  11.     <img src="h2_text.gif" alt="気が付けばいつもコレ・・なんでかな?" />
  12.     <h3>シンプル・イズ・ザ・ベスト♪</h3>
  13.     <p>
  14.         シンプルな真っ白のコーヒーカップは、朝食の食卓にも、リビングでゆっくり
  15.         読書をする時もしっくりマッチ。
  16.         丸っこい可愛いフォルムは、見る人を癒します。
  17.     </p>   
  18.     <h3>可愛いだけじゃない、優れもの!</h3>
  19.     <p>
  20.         しかし、この形、実は「持ちやすさ」と「飲みやすさ」を考えつくしたメーカーの出した
  21.         最善の答えだったのです。
  22.         可愛いだけじゃない、この機能性。うんちく好きにもピッタリ!?
  23.     </p>   
  24.     <h3>プレゼントにも!</h3>
  25.     <p>
  26.         シンプルで飽きのこないデザインだから、プレゼントにも最適。
  27.         余計なデザインがないから、年齢問わず気に入っていただけそう♪
  28.         勿論、ご夫婦やカップルでさりげなくおそろい!なんて、いうのも可愛い!
  29.     </p>
  30.     <table>
  31.     <caption>スペック</caption>
  32.         <tr><th>素材:</th><td>磁器</td></tr>
  33.         <tr><th>カラー:</th><td>ホワイト</td></tr>
  34.         <tr><th>直径:</th><td>10cm</td></tr>
  35.         <tr><th>高さ:</th><td>10cm</td></tr>
  36.     </table>   
  37. </body>
  38. </html>

設計図を作ろう!

さて、vol.2の作業の流れ編で、完成図を考えました。
完成図

次は、これをどうやってコーディングするのか、設計図を作りましょう。これがあれば、コーディングに迷いが出ませんし、レイアウトなど、特に全体を把握する必要がある部分にはとても役立ちます。(この設計図の事をワイヤーフレームと呼びます。)

完成図をもう一度見てみると、左に写真、右に文章となっています。全体の幅は、写真部分プラス文章部分で550pxとして作成しています。

写真の幅は210pxで作成しましたので、widthは210px。右の文章部分は、550-210で340px。写真と文章の間に余白として10px入れるので、widthは330pxとなります。

以上の事から設計図はこうなります。

設計図.gif

左に領域を一つ、右に領域を一つ、この二つを囲む様に、大きな領域を一つという設計図になりましたね。この領域は何を表しているのかという言うと、何度も出てきた「ボックス」です。

ボックスとは、ブロック要素やインライン要素の領域の事で、余白と枠線を持つ四角形の事でした(vol.3参照)さて、この領域、どんなタグ付けをすれば適当でしょうか。

ここでは、<div>というタグを使います。

<div>というタグは、特に意味を持たない珍しいタグです。強いて言うなら「ここから」でしょうか。

「ここからここまでを、まとめてセンタリングしたい」等という時に使います。スタイルシートを適用するためのタグと考えて良いでしょう。(同じようなタグに<span>があります。こちらは、インライン要素です。)

タグが決まった所で、設計図に基づいて、「領域」を作成してしまいましょう。

CODE:
  1. <!-- 一番大きな外側の領域 -->
  2. <div>   
  3.     <!-- 左の領域 -->
  4.     <div>
  5.         <img src="cup.jpg" alt="シンプルカップ" />
  6.         <img src="cup2.jpg" alt="シンプルカップ2" />
  7.     </div>
  8.     <!-- 左の領域おわり -->
  9.     <!-- 右の領域 -->
  10.     <div>
  11.         <img src="h2_text.gif" alt="気が付けばいつもコレ・・なんでかな?" /> 
  12.         <h3>シンプル・イズ・ザ・ベスト♪</h3>
  13.         <p>
  14.             シンプルな真っ白のコーヒーカップは、朝食の食卓にも、リビングでゆっくり
  15.             読書をする時もしっくりマッチ。
  16.             丸っこい可愛いフォルムは、見る人を癒します。
  17.         </p>       
  18.         <h3>可愛いだけじゃない、優れもの!</h3>
  19.         <p>
  20.             しかし、この形、実は「持ちやすさ」と「飲みやすさ」を考えつくしたメーカーの出した
  21.             最善の答えだったのです。
  22.             可愛いだけじゃない、この機能性。うんちく好きにもピッタリ!?
  23.         </p>       
  24.         <h3>プレゼントにも!</h3>
  25.         <p>
  26.             シンプルで飽きのこないデザインだから、プレゼントにも最適。
  27.             余計なデザインがないから、年齢問わず気に入っていただけそう♪
  28.             勿論、ご夫婦やカップルでさりげなくおそろい!なんて、いうのも可愛い!
  29.         </p>   
  30.         <table>
  31.         <caption>スペック</caption>
  32.             <tr><th>素材:</th><td>磁器</td></tr>
  33.             <tr><th>カラー:</th><td>ホワイト</td></tr>
  34.             <tr><th>直径:</th><td>10cm</td></tr>
  35.             <tr><th>高さ:</th><td>10cm</td></tr>
  36.         </table>
  37.     </div>
  38.     <!-- 右の領域おわり -->
  39. </div>
  40. <!-- 一番大きな外側の領域おわり -->

名前を付けよう!

さて、写真の部分を左、文章の部分を右に寄せたいのですがdivタグにスタイルを指定すると、全てのdivタグに指定した事になります。
全体のdiv、右部分のdiv・・と別々にスタイルを指定したい場合は、どうすれば良いのでしょうか。

複数あるタグの中で、ひとつを指定したい時は、名前を付けます。方法は、タグが持つ、「id属性」に任意の名前を指定します。

この「id属性」を使った名前付けをする場合は、同じ名前を他の要素に付ける事は出来ません。
ですので、id属性で名前を付ける時は、同じようなスタイル指定を繰り返さない、例えばヘッダーやフッターなど、一つのHTMLファイルに一つしかない要素に使用します。

この場合も、左側のボックスという意味のdivは、もう2度と出てこないという意味で、id属性を使用します。
(反対に、同じスタイルを持つ要素が複数出てくる場合に使われる名前付けの方法として、class属性というものもあります。)

今回は、各々のdivタグに幅(width)やレイアウト用に回りこみの属性を指定したいので、3つ全てに名前をつけます。
それでは、外側の大きなdivには「container」、写真部分には「pic_area」、文章部分には「text_area」という名前をつけてみましょう。
書き方は

CODE:
  1. <!-- 一番大きな外側の領域 -->
  2. <div id="container">       
  3.     <!-- 左の領域 -->
  4.     <div id="pic_area">
  5.         <img src="cup.jpg" alt="シンプルカップ" />
  6.         <img src="cup2.jpg" alt="シンプルカップ2" />
  7.     </div>
  8.     <!-- 左の領域おわり -->
  9.     <!-- 右の領域 -->
  10.     <div id="text_area">
  11.     ~以下、省略

こうなります。

名前付けが終わり、いよいよスタイル付けが出来る状態になりました。
次のページは幅指定と、floatプロパティについてです。

いよいよ段組!

早速、設計図通りに幅を指定してみましょう!
CSSで、スタイル指定の仕方はこうなります。#(シャープ)の後に、ID属性で指定した名前を書きます。(div#container の様に、要素の後に#を続けても同じ意味です。)

CODE:
  1. /* 全体を囲うdiv */
  2. #container{
  3.     width:550px;
  4. }
  5. /* 画像の部分 */
  6. #pic_area{
  7.     width:210px;
  8. }
  9. /* 文章の部分 */
  10. #text_area{
  11.     width:330px;
  12.     padding-left:10px;
  13. }

これで、幅は指定出来ました。

次に画像の部分を左に、文章の部分を右に回り込ませます。CSSでのレイアウトで、良く使われる方法として、floatプロパティがあります。このプロパティにleft、つまり左を指定すると、

ボックスを左に配置、後に続く要素を右に回り込ませる。

という意味になります。
早速、pic_areaを左に配置し、後続のtext_areaを回りこませましょう!

CODE:
  1. /* 全体を囲うdiv */
  2. #container{
  3.     width:550px;
  4. }
  5. /* 画像の部分 */
  6. #pic_area{
  7.     width:210px;
  8.     float:left;
  9. }
  10. /* 文章の部分 */
  11. #text_area{
  12.     width:330px;
  13.     padding-left:10px;
  14. }

さて、うまく回り込んだでしょうか?
どうやら上手くいかないようです・・。

floatでのレイアウトでの注意点

実はこのfloatを使ったレイアウト、仕様そのものも少々複雑なのですが、
なんといってもIEに独自にバグがあり、いくつか気をつけなければ上手くいかない、コーダーを悩ませる代表的なプロパティです。

IEのfloatに関するバグは、

バグ1:
floatの後続のボックスに幅(width)が指定してある場合、floatしたボックスと、後続のボックスの間に隙間が空く。

バグ2:
後続のボックスの幅を、自動的に短く調整(?)してしまう。

例)

左のdiv50px
右のdiv80px

上の例ではIEで隙間が出来ているのが解ります。
今回floatが上手くいかなかった原因は、この隙間の分、親(container)のボックスより幅が大きくなってしまい、カラム落ち(入りきらなくなり、下に落ちる)したためです。試しにcontainerのwidthを560pxに広げてみて下さい。IEでは、段組が出来ています。

しかし、Firefoxでは下に表示されています。

これは、動作としてはFirefoxが正しく、IEは後続のボックスであるtext_areaを自動的に短く調整してしまっているため、一見上手くいったかの様に見えているだけです。バグ2ですね。

このバグを解消するため、floatを使ったレイアウトでは注意点が2つあります。

注意1:floatを指定したボックスには必ずwidthを指定する。
注意2:後続のボックスを回り込ませるためには、後続のボックスもfloatする。(そのためwidthを必ず指定する。)

これで、隙間も解消され、ブラウザ間の表示のずれもなくなります。CSSは最終的に、こうなります。

CODE:
  1. @charset "shift_jis";
  2.  
  3. /* 余白を初期化 */
  4. * { margin:0;    padding:0}
  5.  
  6. /* 基本の設定 テキストのサイズやフォントの種類を設定しておきます */ 
  7. body {
  8.     font-size:80%;
  9.     font-family:"MS Pゴシック", "ヒラギノ角ゴ Pro W3" , sans-serif;
  10.     padding:20px;
  11. }
  12.    
  13. /* 全体を囲うdiv */
  14. #container{
  15.     width:550px;
  16. }
  17.  
  18. /* 画像の部分 */
  19. #pic_area{
  20.     width:210px;
  21.     float:left;
  22. }
  23.  
  24. /* 文章の部分 */
  25. #text_area{
  26.     width:330px;
  27.     padding-left:10px;
  28.     float:left; 
  29. }

なんとか、レイアウトが上手くいきました。
次回は、各々の要素にスタイルをつけ、いよいよ完成!です。


Web力向上ポータル、納得発注道しるべ: http://www.webryoku.jp

記事のURL: http://www.webryoku.jp/news-and-tips/tips/css/p/136

記事中のlink:
[1] PLAIN TEXT: #
[2] PLAIN TEXT: #
[3] PLAIN TEXT: #
[4] PLAIN TEXT: #
[5] PLAIN TEXT: #
[6] PLAIN TEXT: #

Copyright © 2008 Webの仕事力向上ポータル、納得発注道しるべ. All rights reserved.