CSS Selector Generator | CSS のセレクタ一覧を一発で自動生成!

18

03月2008年

HTML をシンプルに保ちつつ、ブロック要素の段組みを実現する方法

sakai 13:28 PM

HTML をシンプルに保ったままブロック要素を段組みする方法です。

↑のように写真を横並びで表示したい、というケースはよくあると思います。

まず、上記の HTML ソースがこちら。

<div id="photo">
<ul>
<li><img src="hoge1.jpg" alt="サンプル1" width="160" height="120" /></li>
<li><img src="hoge2.jpg" alt="サンプル2" width="160" height="120" /></li>
<li><img src="hoge3.jpg" alt="サンプル3" width="160" height="120" /></li>
</ul>
</div><!-- /#photo -->

今回のサンプルでは、ボックスと余白が以下になっています。

全体の横幅(500px)が決まっていて、左右を全体の幅に揃えたい場合、次のように CSS を記述すれば HTML をシンプルに保ったまま(個別に id や class を適用することなく)段組み表示を実現することができます。

* { /* デフォルトCSSのリセット */
  margin: 0;
  padding: 0;
}
div#photo {
  position: relative; /* 相対配置指定 */
  width: 500px; /* 全体の横幅 */
  height: 120px;
}
div#photo ul {
  position: absolute; /* 絶対配置指定 */
  top: 0;
  left: 0;
  width: 510px;
  height: 120px;
  list-style-type: none;
}
div#photo li {
  float: left; /* floatで段組み */
  width: 160px;
  height: 120px;
  margin-right: 10px; /* 余白 */
}

position と float の合わせ技によるテクニックです。普段 float だけ使用していると結構苦労するレイアウトでも、position を活用することで簡単に段組みを実現することができます。

ブロック要素の段組みでは欠かせないオススメのテクニックです。

バシャログスタッフによるWebサイト制作サービス

トラックバック

このエントリーのトラックバックURL
http://c-brains.jp/cgi-bin/mt/###/1481
###はmt-tb.cgiに変更してください。

コメント

div#photoにposition: relative;
div#photo ulにposition: absolute;
をそれぞれ指定する理由がわからないのですが?

とおりすがり | 2008年03月18日 20:35

段組みの下にコンテンツがある場合、div#photo にもheightを指定しないとコンテンツが食い込んでしまいますね。

>とおりすがりさん
コメントありがとうございます。
div#photo に position:relative を指定することで、ul の position:absolute の基準位置を div#photo の左上にしています。
div#photo に position を指定しない(デフォルト値 position:static のまま)ですと、ウィンドウ全体の左上が基準位置になってしまいます。

>com2 さん
コメントありがとうございます。
ご指摘のとおり、段組の下にコンテンツを配置する場合は div#photo にも height:120px を指定しないといけませんでしたね。検証不足でお恥ずかしい限りです…。
本文のサンプルコードを修正いたしました。ありがとうございました。

検証せずにコメントして恐縮なのですが、、
div#photo li の右マージン、そのままだとIE6では倍の長さになってしまわないでしょうか。
フロートした要素の横マージンは、IE6ではバグのため倍になってしまうと記憶しています。なので私はよく、
display:inline;
をフロートした要素に記述しています。

倍になっていなければ・・・ごめんなさい。

>kaz さん
コメントありがとうございます。
IE6 の有名なバグですね。float と同じ方向(サンプルの場合 left)に margin を指定すると、ご指摘の通りのバグが発現します。サンプルでは margin を右方向(right)に指定していますので、IE6 でも他のモダンブラウザ同様の正常な表示がされます。

とはいえ、うっかりバグを発現させないためにも float する要素にはなるべく padding で余白を指定したほうが良いかもしれませんね。
ご指摘ありがとうございました。

コメントを投稿

ページの先頭へ

POPULAR TAGS
  • バシャログスタッフによるWebサイト制作サービス

ARCHIVE

特集

  • ステップアップ!CakePHP
  • 作って学ぶjQuery