昨年、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 パララックス・スクロール:動作サンプル
ぜひ導入を検討してみてはいかがでしょうか。