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>
「CSS3で画像をおしゃれに演出」サンプルプログラム





