2007年10月14日

CSSで、キャプション付きの複数の画像を、画面に敷き詰めて並べる

ブログの写真の一覧ページをリニューアルしてみた。ブログを始めた頃(4年前)に、<table> レイアウトで作ったものだったので、遅ればせながらCSSを使ったレイアウトに。画像とキャプション付きできれいにレイアウトするために、いつも忘れがちなポイントがいくつかあるのでまとめておく。リニューアル後の、ページはこんな感じになりました。Mac Safari, FireFox、windows IE6 で確認したところOKそう。

サンプルページ : 海・波・ビーチ・夕日の写真

firefox-final.jpg

まず、画像のサムネイルとタイトル(キャプション)は、以下のようなHTML構造に。

<div class="grid">

  <div class="section">
    <a href=""><img width="120" height="120" src="/icon/IMG_5962.jpg" alt="2007/09/01" /></a>
	<div class="title">
			<h3><a href="">台風8号の伊豆サーフィン</a></h3>
	</div>
  </div>

//  写真の数だけ上記の div の繰り返し
</div>  

<div class="grid">の内側に、画像とキャプションを<div class="section">でくくって、繰り返し記述します。そのdivをfloatで横に並べて、サムネイルを一覧表示します。最終的なCSSはこんな感じになりました。

grid.css

以下に気をつけたポイント。

画像を横に敷き詰めて並べる

これは単純に、float で流し込んであげればよいだけ。

div.grid
{
  clear: both;
}

div.grid div.section
{
  float:left;
  height: 160px;
  width: 150px;
  padding:6px 0px 0px 0;
  text-align: left;
}

キャプションの幅を画像にそろえて、余分な文字を表示しない

画像のタイトルの長さは、ブログの記事によって様々なので、そのまま表示すると以下のように統一感がなくなってしまう。

boxmodel.jpg

そこでまずは、改行をしないようにして、さらに、はみ出した部分を隠す。

overflow: hidden;
white-space: nowrap;

また、画像の幅に合わせてタイトル文字のwidthを指定しつつ、文字は適度な余白をpadding であけて読みやすくしたい。ただし、IE6ではボックスモデルにおけるwidthの解釈が異なるケースがあるので、<h3>の外側に、<div class="title">というdivをもう一つ用意して、そちらでwidthなどを指定するようにする。ついでにopacityとalphaで背景を透明にしてみた。

参照 : ADP: IE6のwidth解釈バグ対処法

キャプション部分のCSSはこんな感じに。

div.grid div.section div.title
{
  margin: 0; 
  padding: 0; 
  width: 122px;
  height: 1.5em;
  background-color: #ffffff;
  overflow: hidden;
  white-space: nowrap;
  opacity: 0.5;
  filter: alpha(opacity = 50);
}

div.grid div.section div.title h3
{
  margin: 0 3px 0 3px;
  color: #777777;
  font-size: 0.9em;
  text-align:left;
  font-weight: normal;
  
}

画像とキャプションとの間に隙間ができるのを防ぐ

画像とキャプションのボックスにmargin=0などを指定して、FireFox やSafari だと隙間がなくみえるが、IEだと微妙に隙間ができてしまう。こんな感じ。

vertical.jpg

これは、img タグにvertical-align を指定してあげればOK。

div.grid div.section img
{
  margin: 0;
  padding: 0;
  vertical-align: bottom; 
  border: 1px solid #ffffff;
}

参照 : 画像の下の余白をなくす || Cool Web Window

ひとまず、これぐらいを気をつけつつCSSが書き終わりました。

grid.css

このHTML、CSSにあわせて写真記事の一覧ページをリニューアルしてみた。次のステップとしては、長いタイトルを onmouse したらツールチップで表示するとかをやってみようかな。

 

ブックマーク & Twitter & はてなスター

コメント

英語だけのコメントは、スパムフィルターではじかれてしまうので、日本語でのコメントをお願いします。

(ページには表示されません)

Yes No

トラックバック

トラックバックURL

ブログ記事の情報

このページへのリンク

このブログを

作成日 : 2007年10月14日 22:38

タグ