CSS3で画像をおしゃれに演出

2011年9月14日(水)
宮本 麻矢(著)山田 祥寛(監修)

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>

  • 「CSS3で画像をおしゃれに演出」サンプルプログラム

著者
宮本 麻矢(著)山田 祥寛(監修)
WINGSプロジェクト

有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表:山田祥寛)。おもな活動は、Web開発分野の書籍/雑誌/Web記事の執筆。ほかに海外記事の翻訳、講演なども幅広く手がける。2011年3月時点での登録メンバは36名で、現在もプロジェクトメンバーを募集中。執筆に興味のある方は、どしどしご応募頂きたい。著書多数。
http://www.wings.msn.to/

連載バックナンバー

Think ITメルマガ会員登録受付中

Think ITでは、技術情報が詰まったメールマガジン「Think IT Weekly」の配信サービスを提供しています。メルマガ会員登録を済ませれば、メルマガだけでなく、さまざまな限定特典を入手できるようになります。

Think ITメルマガ会員のサービス内容を見る

他にもこの記事が読まれています