[CSS]アニメーションを伴った画像ギャラリーをCSS3で実装するチュートリアル
Post on:2012年1月31日
jQueryなどのJavaScriptを使用せずに、フェードのアニメーションで画像が切り替わるギャラリーを実装するCSS3のチュートリアルを紹介します。
各画像への#リンクも有効です。
Pure CSS3 Slider (Fade Transition)
[ad#ad-2]
Pure CSS3 Sliderのデモ
画像ギャラリーのナビゲーションは下部の丸いアイコンで、クリックするとフェードのアニメーションで画像が切り替わります。
デモの対応ブラウザはFirefox, Chrome, Safari, IE9+です。
※IE9ではフェードのアニメーションはなしです。
ギャラリーの各画像の#リンクにも対応しています。
Pure CSS3 Sliderの実装
HTML
HTMLは画像とナビゲーション(リスト要素)をdiv要素で内包します。
<div id="slider"> <!-- Sildes --> <img id="one" src="http://cssdeck.com/uploads/media/items/3/3yiC6Yq.jpg" /> <img id="two" src="http://cssdeck.com/uploads/media/items/4/40Ly3VB.jpg" /> <img id="three" src="http://cssdeck.com/uploads/media/items/0/00kih8g.jpg" /> <img id="four" src="http://cssdeck.com/uploads/media/items/2/2rT2vdx.jpg" /> <img id="five" src="http://cssdeck.com/uploads/media/items/8/8k3N3EL.jpg" /> <!-- Links for the slides! --> <ul> <li> <a href="#one"></a> </li> <li> <a href="#two"></a> </li> <li> <a href="#three"></a> </li> <li> <a href="#four"></a> </li> <li> <a href="#five"></a> </li> </ul> </div>
[ad#ad-2]
CSS
CSSは長いので、分けて紹介します。
デモページ:ギャラリーのスタイル
まずは、画像ギャラリーの見栄えです。
「box-shadow」を使用し、両端にがふわりと浮かんだ感じにします。
body { padding: 0; margin: 0; background: #ccc; } #slider { width: 640px; height: 320px; margin: 35px auto 0; position: relative; background: #fff; box-shadow: 0px 0px 5px 0px rgba(0,0,0,0.2); -moz-box-shadow: 0px 0px 5px 0px rgba(0,0,0,0.2); -webkit-box-shadow: 0px 0px 5px 0px rgba(0,0,0,0.2); } #slider:before, #slider:after { content: ''; position: absolute; width: 60%; height: 20px; -webkit-box-shadow: 0 8px 16px rgba(0, 0, 0, 0.5); -moz-box-shadow: 0 8px 16px rgba(0, 0, 0, 0.5); -ms-box-shadow: 0 8px 16px rgba(0, 0, 0, 0.5); -o-box-shadow: 0 8px 16px rgba(0, 0, 0, 0.5); box-shadow: 0 8px 16px rgba(0, 0, 0, 0.5); -webkit-transform: rotate(-4deg) skew(-10deg); -moz-transform: rotate(-4deg) skew(-10deg); -o-transform: rotate(-4deg) skew(-10deg); -ms-transform: rotate(-4deg) skew(-10deg); transform: rotate(-4deg) skew(-10deg); left: 10px; bottom: 13px; z-index: -1; } #slider:after { left: auto; right: 10px; -webkit-transform: rotate(4deg) skew(10deg); -moz-transform: rotate(4deg) skew(10deg); -o-transform: rotate(4deg) skew(10deg); -ms-transform: rotate(4deg) skew(10deg); transform: rotate(4deg) skew(10deg); }
デモページ:ナビゲーションのスタイル
ナビゲーションのスタイルです。
リスト要素のスタイルをリセットし、「box-shadow」「border-radius」を使いデザインします。
#slider ul { width: 140px; height: 40px; padding: 0 0 0 0; position: absolute; z-index: 10; list-style: none; left: 50%; margin-left: -70px; bottom: -60px; } #slider ul li:first-child { margin-left: 16px; } #slider ul li { float: left; margin-right: 12px; margin-top: 14px; } #slider ul li:last-child { margin-right: 0; } #slider ul li a { width: 12px; height: 12px; display: block; outline: none; border: none; position: relative; z-index: 2; background: #aaa; box-shadow: inset 0 1px 1px 0px rgba(0,0,0,0.6), 0px 1px 1px 0px white; -moz-box-shadow: inset 0 1px 1px 0px rgba(0,0,0,0.6), 0px 1px 1px 0px white; -webkit-box-shadow: inset 0 1px 1px 0px rgba(0,0,0,0.6), 0px 1px 1px 0px white; -webkit-border-radius: 50%; -moz-border-radius: 50%; border-radius: 50%; } #slider ul li a:hover { background: #888; }
デモページ:アニメーションのスタイル
最後に、画像切り替え時のアニメーションです。
デフォルトで不透明度を0にし、ターゲットがあたったら不透明度を1にし、フェードのアニメーションします。
#slider img { position: absolute; left: 0; top: 0; opacity: 0; -webkit-transition: all .5s ease; -moz-transition: all .5s ease; -ms-transition: all .5s ease; -o-transition: all .5s ease; transition: all .5s ease; } #slider img:target { opacity: 1; } #slider img#five { opacity: 1; } #slider img:not(:target), #slider img:target ~ img#five { opacity: 0; } #slider ul li a[href="#five"] { background: #777; } #one:target ~ ul li a[href="#one"], #two:target ~ ul li a[href="#two"], #three:target ~ ul li a[href="#three"], #four:target ~ ul li a[href="#four"], #five:target ~ ul li a[href="#five"] { background: #777; } #two:target ~ ul li a[href="#five"], #three:target ~ ul li a[href="#five"], #four:target ~ ul li a[href="#five"], #one:target ~ ul li a[href="#five"] { background: #aaa; }
sponsors