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

17

09月2008年

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

sakai 23:57 PM

イメージ

HTML をシンプルに保ったままブロック要素を段組みする方法」「HTML をシンプルに保ったままブロック要素を段組みする方法 パート2」の応用テクニックのご紹介です。

前回までは画像の横並びの解説でしたが、今回は段組みさせるブロック要素(サンプルの場合は div 要素)の内容が画像のみとは限らない場合です。

ボックスと余白の幅の値は以下です。

HTML ソースはこちら。シンプルなソースになっています。

<div id="content">
<div class="section">

<div class="box">
<h2>会社案内</h2>
<p>株式会社シーブレインのご紹介</p>
<!-- /.box --></div>

<div class="box">
<h2>採用情報</h2>
<p>プログラマ中途採用募集中! まずはお問い合わせください。</p>
<!-- /.box --></div>

<div class="box">
<h2>サービス概要</h2>
<p>マニュアル制作、WEBサイト制作、ローカライゼーション</p>
<!-- /.box --></div>

<!-- /.section --></div>
<!-- /#content --></div>

全体の横幅(div#content {width:500px})が決まっていて、段組みした要素の左右を全体の幅に揃えたい、さらに各ボックスの下辺のラインも合わせたい場合、以下のように CSS を記述すれば HTML をシンプルに保ったまま段組み表示を実現することができます。

div#content {
  width: 500px;
}
div.section {
  width: 510px;
  margin-right: -10px; /* ※1 */
}

div.box {
  display: inline; /* ※2 */
  float: left;
  width: 158px;
  min-height: 6.5em;       /* ※3 */
  height: auto !important; /* ※3 */
  height: 6.5em;           /* ※3 */
  margin-right: 10px;
  border: 1px #999999 solid;
}

div.box h2 {
  margin: 0;
  padding: 2px;
  background: #999999;
  font-size: 80%;
}
div.box p {
  margin: 5px;
  font-size: 80%;
  line-height: 1.5;
}
  • ※1:
    ネガティブマージンで全体の幅に対してはみ出した分の値を打ち消します。
  • ※2:
    IE6 の場合、サンプルでいうところの div#content を float すると、表示が少しズレてしまいます。
    IE6 における既知のバグ(マージンが倍になる系?)だと思いますが、発生条件の検証はしていません(すみません…)
    display: inline; を指定しておくことで、IE6 のバグは回避することができます。
  • ※3:
    下辺を合わせるために、ここでは min-height を使用しています。
    文字サイズを拡大していき min-height の値を超えると内容によっては下辺もズレてきますので万能ではありません。
    ある程度の文字サイズの拡大を考慮して、あらかじめ高めに設定しておくのがコツかと。
    IE6 では min-height が使えませんので、以下の記事を参考に IE6 用の対策をしてあります。
    IE6のmin-width、min-heightハックに関して

企業サイトなどを制作していると、上記サンプルのようなレイアウトが意外とよく出てくるのではないかと思います。
テクニックとして身に付けておけば、色々なレイアウトに応用ができるようになりますので、オススメです。

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

トラックバック

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

コメント

Win IE6 の環境で印刷(印刷プレビュー)をするとカラム落ちするようです。
何か対策があれば教えて頂ければと思います。

>glossさま
コメントありがとうございます。

IE6 の場合、印刷範囲に合わせて自動でページを縮小しないため、実際の印刷範囲より横幅が広いとカラム落ちしてしまうと思います。

印刷用の CSS を別途用意して「zoom:60%」などで印刷範囲内にコンテンツが収まるようにすれば、カラム落ちしないです。お試しください。

今後ともバシャログ。をよろしくお願いいたします!

ご回答ありがとうございました。
こちらの質問が悪く、再度ご質問させて頂きたいと思います。
当ページにあるソースですと、
#content が 500pxなので、A4 1ページ内におさまる幅だと思います。
試しに下記URLにアップしていますが、
IE6で印刷プレビューをすると3つ目のBOXが2行目に落ちてしまいます。
これを回避する方法があれば教えて頂ければと思います。
※Win IE8、FF3.6 での印刷プレビューは問題ありませんでした。
http://testservers.zxq.net/test.html

>gloss さん
再度コメントありがとうございます。

現象を確認いたしました!
DOCTYPEスイッチが後方互換モードだと印刷時でもカラム落ちしないのですが、標準モードだと落ちるみたいです。
float したオブジェクトに変な隙間が空く系のバグでしょうか…?

対処法としては、やはり印刷用のCSSを用意して、印刷時のみ #content と .section の width をそれぞれ 10px ほど増やしてあげると、落ちないみたいです。お試しください。

よろしくお願いいたします!

隙間が空くバグかも・・・との事で調べたのですが、
#content の width を 501px に、
.section の width を 511px にした所、落ちませんでした。
上記より、
最後のBOXに 1px 余白がつくという事が分かりました。
http://testservers.zxq.net/test2.html

ちなみに、
overflow:hidden; や zoom:1; の追加を試しましたがうまくいきませんでした。

引き続き調べてみたいと思います。

>glossさん
ご丁寧に検証の結果をご報告いただきありがとうございます。
1px 大きくするだけでいけたのですね。

hasLayout のスイッチや overflow、position 系のプロパティで上手くいかないかと私も試してみたのですが、どうも上手くいかないようですね…

私のほうでも他の方法を試してみます。

今後ともどうぞよろしくお願いいたします!

コメントを投稿

ページの先頭へ

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

ARCHIVE

特集

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