[使える CSS テクニック] CSSだけで実現するPhotoアルバム

No Photo

集中連載「使える CSS テクニック」も第 9 回になりました。
今回は CSS だけで画像ギャラリーを作ります。

画像の挙動は、(IE6 でも同様の表示ができるように)a タグの擬似クラスだけで設定しています。

サンプル

XHTML


<div id="album">
  <ul>
  <li><a id="photo01" href="#slide"><em><img src="css_album/img/photo01.jpg" /></em><span>日本大通り駅</span></a></li>
  <li><a id="photo02" href="#slide"><em><img src="css_album/img/photo02.jpg" /></em><span>指路教会</span></a></li>
  <li><a id="photo03" href="#slide"><em><img src="css_album/img/photo03.jpg" /></em><span>馬車道入口</span></a></li>
  <li><a id="photo04" href="#slide"><em><img src="css_album/img/photo04.jpg" /></em><span>馬車道十番館</span></a></li>
  <li><a id="photo05" href="#slide"><em><img src="css_album/img/photo05.jpg" /></em><span>県立歴史博物館</span></a></li>
  <li><a id="photo06" href="#slide"><em><img src="css_album/img/photo06.jpg" /></em><span>北仲通り</span></a></li>
  </ul>
  </div><!-- /#album -->

各リストは、以下のとおりに設定します。


<li><a id="各画像のid名" href="ダミーリンク"><em><img src="表示する画像" /></em><span>タイトル</span></a></li>

CSS


/* エリア設定
--------------------------------------------------------- */
div#album {
  position: relative;
  width: 530px;
  height: 275px;
  margin: 0 auto 1em;
  background: #373737 url(img/bg_album.gif) no-repeat 230px 110px;
  border: 1px #878787 solid;
}
div#album ul {
  position: absolute;
  top: 30px;
  left: 12px;
  width: 200px;
  height: 250px;
  background: url(img/bg_title.gif) no-repeat 0 187px;
}
div#album ul li {
  float: left;
  margin: 0 5px 5px 0;
}

/* 挙動設定
--------------------------------------------------------- */
/* サムネイル画像設定 */
div#album ul li a,
div#album ul li a:visited {
  display: block;
  width: 80px;
  height: 52px;
  border: 2px #FFFFFF solid;
  z-index: 50;
  outline: none;
}
  div#album ul li a:hover {
  border: 2px #FF6600 solid;
  outline: none;
}
  div#album ul li a:active,
  div#album ul li a:focus {
  border: 2px #666666 solid;
  outline: none;
}

/* メイン画像設定 */
div#album ul li a em,
div#album ul li a span {
  display: none;
}
div#album ul li a:active em,
div#album ul li a:focus em {
  position: absolute;
  top: 0;
  left: 188px;
  display: block;
  width: 300px;
  border: 8px #E7E7E7 solid;
  z-index: 50;
}

/* タイトル設定 */
div#album ul li a:hover span {
  position: absolute;
  top: 193px;
  left: 0;
  display: block;
  width: 170px;
  text-align: center;
  font-weight: bold;
  font-size: 120%;
  color: #C7C7C7;
  z-index: 100;
}

/* 各サムネイル画像読込み設定
--------------------------------------------------------- */
a#photo01 {background:url(img/photo01_thumb.jpg);}
a#photo02 {background:url(img/photo02_thumb.jpg);}
a#photo03 {background:url(img/photo03_thumb.jpg);}
a#photo04 {background:url(img/photo04_thumb.jpg);}
a#photo05 {background:url(img/photo05_thumb.jpg);}
a#photo06 {background:url(img/photo06_thumb.jpg);}

ポイント

  1. サムネイル画像は背景画像で表示します。
    a 各id属性 [background:url(img/photo01_thumb.jpg);]
  2. 初期状態ではメイン画像を非表示にしておきます。
    a 内 em [display: none;]
  3. サムネイル画像が :hover 時に、タイトルを表示します。
    a 内 span [display: block;]
  4. サムネイル画像が :active(または:focus)時に、メイン画像を表示します。
    a 内 em [display: block;]

注意:各設定の順番を入れ替えると、正しい表示ができなくなる場合がありますので注意が必要です。


もちろん Javascript を使えば、もっともっと効果的な動きが実現できますが、現状のCSSだけでもココまで表現するコトができます。
今後、様々な擬似クラス・擬似要素、また transforms and transition などが使用できるようになれば、CSSの表現はさらに広がりを見せるようになるでしょう。
楽しみでなりません。

次回はいよいよ最終回!
「第 10 回 CSSで文字サイズを変更するボタンを設置する」です。お楽しみに!

  • このエントリーをはてなブックマークに追加

この記事を読んだ人にオススメ