[CSS]スクリプト無し、スタイルシートで実装するパララックススクロール

パララックス=スクリプトと思っていたのですが、スクリプト無しでも実装できるんですね。
今後、実装方法がますます進化しそうです。

デモのキャプチャ

Pure CSS Parallax Scrolling

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

top of page

©2017 coliss