昨年、2013年度あたりから普及し始め、今年も大流行したウェブデザインのテクニックの1つである[パララックス・スクロール]をCSS3だけで実装する方法を紹介します。
パララックス(Parallax)とは日本語に訳すと「視差効果」を意味し、主にマウスの動きに合わせて特定の要素のスクロール量をコントロールして、ウェブサイトに奥行きや遠近感を表現する手法です。
「パララックス・スクロール」の他に、「パララックス・デザイン」や「パララックス・エフェクト」とも呼ばれています。
まずは動作のサンプルをご覧ください。
CSS3 パララックス・スクロール:動作サンプル
上記サンプルサイトでは、Internet Explorer 以外のモダンブラウザ(Safari、Google Chrome、Firefox、Opera等)をお使いの場合、「開発モード」のボタンをチェックするとレイヤーが3D化されるので構造を理解しやすいと思います。
さて。このパララックスをjQuery無しで導入するにあたり、キモとなるのがCSS3の「perspective」プロパティと「transform」プロパティです。
「perspective」プロパティは、要素に「transform」効果を適用する際に、その奥行きの深さを指定するために設定します。
「transform」プロパティでは、値に[translateZ]関数を使うことで、Z軸での距離を指定することができます。
文章の説明だけでは難しいので、実際のHTMLとCSSの記述を見てみましょう。
まずはHTMLの記述です。
<div id="parallax"> <section id="group1" class="section"> <div class="parallax-layer layer-base"> Base Layer </div> </section> <section id="group2" class="section"> <div class="parallax-layer layer-base"> Base Layer </div> <div class="parallax-layer layer-back"> Background Layer </div> </section> <section id="group3" class="section"> <div class="parallax-layer layer-fore"> Foreground Layer </div> <div class="parallax-layer layer-base"> Base Layer </div> </section> <section id="group4" class="section"> <div class="parallax-layer layer-base"> Base Layer </div> <div class="parallax-layer layer-back"> Background Layer </div> <div class="parallax-layer layer-deep"> Deep Background Layer </div> </section> <section id="group5" class="section"> <div class="parallax-layer layer-fore"> Foreground Layer </div> <div class="parallax-layer layer-base"> Base Layer </div> </section>
パララックス効果を適応させたい要素にクラス名で「layer-fore」「layer-base」「layer-back」「layer-deep」を指定しています。
続いてCSS側の記述です。
#parallax { height:100vh; overflow-x:hidden; overflow-y:auto; -webkit-perspective:300px; -moz-perspective:300px; -ms-perspective:300px; -o-perspective:300px; perspective:300px; } .layer-fore { -webkit-transform:translateZ(90px) scale(.7); -moz-transform:translateZ(90px) scale(.7); -ms-transform:translateZ(90px) scale(.7); -o-transform:translateZ(90px) scale(.7); transform:translateZ(90px) scale(.7); z-index:4; } .layer-base { -webkit-transform:translateZ(0); -moz-transform:translateZ(0); -ms-transform:translateZ(0); -o-transform:translateZ(0); transform:translateZ(0); z-index:3; } .layer-back { -webkit-transform:translateZ(-300px) scale(2); -moz-transform:translateZ(-300px) scale(2); -ms-transform:translateZ(-300px) scale(2); -o-transform:translateZ(-300px) scale(2); transform:translateZ(-300px) scale(2); z-index:2; } .layer-deep { -webkit-transform:translateZ(-600px) scale(3); -moz-transform:translateZ(-600px) scale(3); -ms-transform:translateZ(-600px) scale(3); -o-transform:translateZ(-600px) scale(3); transform:translateZ(-600px) scale(3); z-index:1; }
親要素となる[#parallax]に[perspective]プロパティとして「-300px」と指定しています。
その子要素となる[.layer-force][.layer-base][.layer-back][.layer-deep]には、それぞれ[transform]プロパティで「translateZ(x)」と「scale(x)」を指定しています。
この「translateZ(x)」と「scale(x)」で指定した数値がZ軸上での奥行きを生み、視差効果として表現されるワケです。
また、忘れてはいけないのが[z-index]プロパティで、要素の重なり順を指定しておくことも重要です。
パララックス効果はjQueryを使うことでも実装できますが、CSS3ならばより簡単に表現することができます。
CSS3 パララックス・スクロール:動作サンプル
ぜひ導入を検討してみてはいかがでしょうか。