[CSS]スクリプト無し、スタイルシートで実装するパララックススクロール
Post on:2014年1月23日
sponsorsr
パララックス=スクリプトと思っていたのですが、スクリプト無しでも実装できるんですね。
今後、実装方法がますます進化しそうです。

デモをスクロールすると、コンテンツと背景が異なるタイミングでスクロールされて表示されます。
背景が派手なので、効果も一目で分かりますねw

スライド2では、左の2枚の画像も異なるタイミングで重なります。

実装方法を簡単に紹介します。
HTML
デモのHTMLをシンプルにするとこんな感じになります。
各スライドはdivで配置し、それぞれclassにslideを、idで個別の名称を付与します。
<div id="title" class="slide header">
<h1>Pure CSS Parallax</h1>
</div>
<div id="slide1" class="slide">
<div class="title">
<h1>Slide 1</h1>
<p>パラグラフ パラグラフ</p>
</div>
</div>
<div id="slide2" class="slide">
<div class="title">
<h1>Slide 2</h1>
<p>パラグラフ パラグラフ</p>
</div>
<img src="image.jpg">
<img src="image.jpg">
</div>
<div id="slide3" class="slide">
<div class="title">
<h1>Slide 3</h1>
<p>パラグラフ パラグラフ</p>
</div>
</div>
<div id="slide4" class="slide header">
<h1>The End</h1>
</div>
CSS
まずはhtmlとbodyにベースとなるスタイルを設定します。
※ベンダプレフィックスは省略はされているので、ベンダプレフィックスを自動で付与するスクリプトを使用すると便利です。
html {
height: 100%;
overflow: hidden;
}
body {
margin:0;
padding:0;
perspective: 1px;
transform-style: preserve-3d;
height: 100%;
overflow-y: scroll;
overflow-x: hidden;
font-family: Nunito;
}
パララックスになるように各スライドの設定をします。
.slide {
position: relative;
padding: 25vh 10%;
min-height: 100vh;
width: 100vw;
box-sizing: border-box;
box-shadow: 0 -1px 10px rgba(0, 0, 0, .7);
transform-style: inherit;
}
.slide:before {
content: "";
position: absolute;
top: 0;
bottom: 0;
left:0;
right:0;
transform: translateZ(-1px) scale(2);
z-index:-1;
}
.title {
width: 50%;
padding: 5%;
border-radius: 5px;
background: rgba(240,230,220, .7);
box-shadow: 0 0 8px rgba(0, 0, 0, .7);
}
.slide:nth-child(2n) .title {
margin-left: 0;
margin-right: auto;
}
.slide:nth-child(2n+1) .title {
margin-left: auto;
margin-right: 0;
}
.slide,.slide:before {
background: 50% 50% / cover;
}
2枚目のスライドにある画像にもパララックスを使用しています。
img {
position: absolute;
top: 50%;
left: 35%;
transform: translateZ(.25px) scale(.75) translateX(-98%) translateY(-100%) rotate(2deg);
padding: 5px;
border-radius: 5px;
background: rgba(240,230,220, .7);
box-shadow: 0 0 8px rgba(0, 0, 0, .7);
}
img:last-of-type {
transform: translateZ(.4px) scale(.6) translateX(-102%) translateY(-100%) rotate(-5deg);
}
最後に各スライドに背景を設定します。
背景はベタ塗りだとパララックスの効果が分からないので、写真画像などが適しています。
#title {
background-image: url("image.jpg");
background-attachment: fixed;
}
#slide1:before {
background-image: url("image.jpg")
}
#slide2 {
background-image: url("image.jpg");
background-attachment: fixed;
}
#slide3:before {
background-image: url("image.jpg");
}
#slide4 {
background: #222;
}
sponsors











