前回は、CSSだけで実装する横並びのプルダウンメニューにつきまして、サンプルソースコードを交え記載いたしました。
PCではおなじみのグローバルナビゲーション、CSSだけで作成できますと他のパーツ(画像など)を準備する必要がなく、とても効率的に作成できることと思います。
今回はtransformを用いて、サムネイル画像を効果的に見せるフォトギャラリーを作成してみたいと思います。また、transformとtransitionの組み合わせにより、CSSのみでサムネイルがマウスに反応する効果を作成してみます。
という事で、それでは今回はッ、
上記について記載していこうと思います...。
まずは、サンプルDemoページ
それではサムネイルを作成します。今回のサンプルではサムネイルに触れていないときは横160×縦120px、拡大時には横320×縦240pxとなるように設定します。拡大後に画像を綺麗に見せるため、サムネイル画像は拡大後のサイズとして書き出しておきます。
HTMLは、ulを使ってコーディングし、各サムネイルは後ほど個別に効果を設定するので、idを記載しておきます。
CSSのコーディングをしていきます。ますは、サムネイルがグリッド状に並んでいるレイアウトになるようにコーディングしていきます。
今回のレイアウトではあえてCSS3の機能などは使わずに、floatを用いてコーディングを行います。liとimgのサイズは、初めに記載したとおり横160×縦120pxに固定しておきます。
| #Gallery li { |
| float: left; |
| width: 160px; |
| height: 120px; |
| margin: 0 20px 20px 0; |
| border: 5px solid #fff; |
| } |
| /* 画像 */ |
| #Gallery li a img { |
| width: 160px; |
| height: 120px; |
| } |
基本的なレイアウトが出来上がったら、拡大した時の重ねあわせを制御するために、あらかじめ#Gallery liにposition:relative;とz-indexの初期値を設定しておきます。
また、サムネイルの装飾も行ってみます。box-shadowで影の設定も追記します。
| /* #Gallery liにz-indexの初期値を追加 */ |
| #Gallery li { |
| position: relative; |
| z-index: 10; |
| box-shadow: 2px 3px 3px #000; |
| } |
次にtransformを用いて、写真が散らばっているような効果を作成します。今回のサンプルでは散らばっているような効果、およびマウスがふれた際の拡大効果のため、transformのscale(拡大)、rotate(回転)、translate(移動)を用います。
scaleには拡大率、rotateには角度、translateには横→縦の順で移動する距離を指定します。
散らばったような効果を出すため、あらかじめ指定しておいたサムネイルのidに対して、1つずつ別の値を設定していきます。値を設定する際は、拡大効果のために、scale(1.0)も一緒に設定しておきます。
| /* 個別の効果 */ |
| #photo1 { |
| transform: scale(1.0) rotate(-10deg) translate(-5px,-3px); |
| } |
| /* 以下#photo2から4も個別に指定 */ |
マウスに反応する効果を作ります。マウスがサムネイルに触れた時に、回転と移動を元に戻し、サムネイルを2倍に拡大するような効果を設定します。 liのhover疑似クラスにrotateとtranslateを0に戻し、scaleを2.0に設定するようなtransformを設定します。
| /* 回転を0、拡大を2倍 */ |
| #Gallery li:hover { |
| transform: scale(2.0) rotate(0deg) translate(0,0); |
| } |
※transformを利用する際の回転や拡大の中心は、無指定の場合、対象ブロックの横50%、縦50%の位置になります。中心点を変更したい場合はtransform-originで、transform-origin:0 100%;のように指定します。
これで触れた時の効果は出来ましたが、このままでは、拡大されたサムネイルが他のサムネイルの下に隠れてしまい部分が出てきてしまいます。
そこで、hoverのスタイルにz-indexを設定します。ここに設定するz-indexは、上記で指定したz-indexよりも大きな値にします。
| #Gallery li:hover { |
| transform: scale(2.0) rotate(0deg) translate(0,0); |
| z-index: 100; |
| } |
最後に、transitionでアニメーション効果を設定します。transitionは、通常の状態からhover状態など、状態間のスタイルの違いをアニメーションさせるためのスタイルです。サムネイルの各状態に設定されたtransformスタイルの違いをtransitionによってアニメーションさせます。
transitionの基本的な記述は、アニメーションさせたいプロパティ名、秒数、イージングを順に指定します。イージングの値として、あらかじめ動きが決められているキーワードには、以下のようなものがあります。
| キーワード | 効果 |
|---|---|
| liner | 一定速度 |
| ease | なめらかな変化 |
| ease-in | ゆっくり開始、素早く終了 |
| ease-out | 素早く開始、ゆっくり終了 |
| ease-in-out | ゆっくり開始、素早く変化、ゆっくり終了 |
サムネイルのアニメーションは、transformをターゲットとして0.2秒でイージングにease-outを指定します。コードはサンプルCSSのようになります。以上で完成となります。
| #Gallery li { |
| float: left; |
| width: 160px; |
| height: 120px; |
| margin: 0 20px 20px 0; |
| border: 5px solid #fff; |
| position: relative; |
| z-index: 10; |
| box-shadow: 2px 3px 3px #000; |
| transition: transform 0.2s ease-out; |
| } |
それでは前回同様、最後にソースコードをコピーして使えるようにまとめて記載してみます。
という事で今回は、CSSだけで実装するインタラクティブなフォトギャラリーをサンプルコードを交え記載してみました。
ロールオーバーとロールアウトなど、状態の変化に関するアニメーションは、上記で記載いたしましたとおり、スタイルシートだけでも実装することができます。サムネイルの数が増減しても、アニメーションを設定し直す必要がないことがメリットといえることと思います。
とりあえず、今回はここまで...。
お仕事のご依頼は下記より...、それではまた次回...。