CSS3で写真ギャラリー

CSS3で写真ギャラリー

最後に、画像装飾のまとめとして、図7のような写真ギャラリーを作ってみましょう。基本的にはここまでの応用ですが、画像にカーソルを乗せると拡大表示するように機能を追加してみましょう。

図7:CSS3でホバー時に拡大表示する写真ギャラリー(左:通常時、右:マウスホバー時)(クリックで拡大)

HTMLソースは次のようになります。li要素の中にリンク画像を入れたシンプルなソースですが、a要素のtitle属性を指定している点に注目してください。

[リスト09]HTMLソース(sample3.html)

  <ul id="polaroids">
    <li><a href="img/bear.jpg" title="しろくまさん"><img src="img/bear.jpg" alt="白熊の写真"></a></li>
    <li><a href="img/deer.jpg" title="シカの親子"><img src="img/deer.jpg" alt="鹿の写真"></a></li>
    <li><a href="img/penguin.jpg" title="水の中のペンギンさん"><img src="img/penguin.jpg" alt="ペンギンの写真"></a></li>
    <li><a href="img/giraffe.jpg" title="首が長いキリン"><img src="img/giraffe.jpg" alt="麒麟の写真"></a></li>
    <li><a href="img/goat.jpg" title="かわいい子ヤギ"><img src="img/goat.jpg" alt="山羊の写真"></a></li>
    <li><a href="img/tiger.jpg" title="ねているトラ"><img src="img/tiger.jpg" alt="虎の写真"></a></li>
  </ul>

タイトルをWebフォントで表示

手書きのタイトルは、a要素のtitle属性を利用しています。contentプロパティで、a要素のtitle属性を抽出し、:after擬似要素セレクタで、a要素の後に挿入しています。さらに、Webフォントを適用すれば手書きタイトルの完成です。なお、CSS3では擬似要素セレクタは「::」を付けて、「::after」というように記述するようになっていますが、IE8ではこの記述に対応していないため、ここではCSS2.1の書式に従って、「:after」で記述しています。

[リスト10]タイトルをWebフォントで表示(sample3.css)

  ul#polaroids a:after {
    content: attr(title);
    font-family: 'Hina2ndGrade', sans-serif;
    color: #333;
  }

写真枠を付けて配置

次に、a要素にスタイルを設定していきましょう。それぞれ独立したものとして配置するため、position: relativeを指定しておきます。さらにfloat: leftで左に回りこませて横並びに配置します。

写真枠の作り方のはこれまでと同じです。a要素の背景色を白にし、上下左右のパディングを指定して枠を表現します。さらにbox-shadowプロパティで影を落とし、5度回転させておきましょう。

[リスト11]写真枠の指定(sample3.css)

  ul#polaroids li a {
    position: relative;
    float: left;
    padding: 10px 10px 20px;
    background-color: white;
    -moz-box-shadow: 0 4px 10px #333;
    -webkit-box-shadow: 0 4px 10px #333;
    box-shadow: 0 4px 10px #333;
    -webkit-transform: rotate(5deg);
    -moz-transform: rotate(5deg);
    transform: rotate(5deg);
  }

ここまでで次のようになります。

図8:写真枠を付け、横並びlに配置(sample3.html)(クリックで拡大)

ランダムに配置

さらに、:nth-child()擬似クラスで、それぞれのa要素を回転させて、不規則に配置したように見せましょう。まず、全ての画像を時計回りに5度回転させます。次に、li:nth-child(2n+1) で、奇数番目の写真を反時計回りに10度回転させます。li:nth-child(3)で、3番目の写真を時計回りに30度回転するよう先の指定を上書きします。これで1,5番目の画像は-10度、2番目は5度、3番目は30度の角度がつきました。

最後に、topプロパティやleftプロパティで、上下左右の位置調整をして、バラバラに配置されたように表現しています。

[リスト12]:nth-child()擬似クラスでランダムに配置(sample3.css)

  ul#polaroids li a {
  ~中略~
    -webkit-transform: rotate(5deg);
    -moz-transform: rotate(5deg);
    transform: rotate(5deg);
  }
  ul#polaroids li:nth-child(2n+1) a {
    -webkit-transform: rotate(-10deg);
    -moz-transform: rotate(-10deg);
    transform: rotate(-10deg);
    position: relative;
    top: -5px;
  }
  ul#polaroids li:nth-child(3) a {
    -webkit-transform: rotate(30deg);
    -moz-transform: rotate(30deg);
    transform: rotate(30deg);
    position: relative;
    top: -10px;
    left: 30px;
  }
  ul#polaroids li:nth-child(4) a {
    position: relative;
    top: -10px;
    left: 10px;
  }

ホバー時に拡大表示

最後にtransformプロパティで、カーソルホバー時に拡大表示する機能を追加しましょう。ここでは、transform: scale(1.25)として125%に拡大するよう指定しています。また、ホバー時の画像が一番上に表示されるよう、z-indexプロパティで6を設定しています。

[リスト13]:nth-child()擬似クラスでランダムに配置(sample3.css)

  ul#polaroids li a:hover {
    -webkit-transform: scale(1.25);
    -moz-transform: scale(1.25);
    transform: scale(1.25);
    z-index: 6;
  }

まとめ

今回は、CSS3の表現を使って、画像を半透明にしたり、回転したり、拡大させたり、それらを組み合わせたりして、ちょっと面白い画像の装飾をしてみました。CSS3の機能を使えば、JavaScriptを使わなくても、簡単な動きを付けることができ、表現の幅が広がるでしょう。

サンプル一式は、会員限定特典としてダウンロードできます。記事末尾をご確認ください。

【参考文献】

「CSS 2D Transforms Module Level 3」

<サイト最終アクセス:2011.08>

人気記事トップ10

人気記事ランキングをもっと見る

企画広告も役立つ情報バッチリ! Sponsored

ClickHouse Cloudが実現した広告運用SaaS「ATOM」のデータ基盤革新、パフォーマンスを向上しながら、運用負荷とコストを削減 11月11日 6:20 AIで開発が加速する時代、品質保証はどう変わる? Tricentisが示すAIエージェント活用の実像 11月9日 6:45 悪用までの猶予が「1分」に迫るフロンティアAI時代に開発と本番を貫く脆弱性管理が必要 10月29日 8:30 欧州CRA対応とSBOM運用。AI生成コードのOSS混入問題の対策とは ――スニペット単位で検出する「FossID」「Insignary Clarity」によるSBOM運用 9月16日 6:40 PostgreSQLからTiDBへ、稼働中SaaSで進める段階的DB移行の実践と再設計への展望 9月7日 6:30 機能安全開発におけるGoogleTestの活用を支援!「Parasoft C/C++test CT」で実現する効率化&AI連携 4月14日 6:30 【CNDW2025】Grafanaが明かす「オブザーバビリティの哲学」ー最小限の労力で実用的なインサイトを得るには 1月23日 6:30 【CNDW2025】プロダクト急増に備える基盤刷新 ーウェルスナビがECSからEKSへの移行で得た知見とは 1月15日 6:30 【CNDW2025】250環境を5人で運用、構築時間は30分に ーKINTOテクノロジーズが語るインフラ基盤組織の作り方 2025年12月18日 6:30 新たな自動化で熱視線! AIエージェントの「推論能力」を支える2つのコンポーネントとは? 2025年11月28日 6:30