【簡単】パララックス 視差効果の実装方法を解説

この記事にはPRが含まれます

今回は視差効果の作り方を紹介します。

背景だけ動かないアレ、どうやってんの?

むっちゃ簡単です。

目次

まずは完成品

See the Pen parallax-attachment by takosan (@Yukiwebcreate) on CodePen.

HTMLとCSSのタブを押せばコードは全て確認できます。

解説

ここからはコードの解説をしていきます。

まずはHTML。こちらは何の変哲もないHTMLです。

<div class="content">
  <h1>上部のテキストコンテンツ</h1>
  <p>こちらはテキストのサンプルです。</p>
</div>

<!-- パララックス効果のセクション。ここに背景画像を入れます。 -->
<div class="parallax"></div>

<div class="content">
  <h1>下部のテキストコンテンツ</h1>
  <p>こちらもテキストのサンプルです。</p>
</div>

さて、肝心なのはCSSです。コード全体は以下の通り。

.content {
  padding: 100px 0;
  text-align: center;
}

.parallax {
  /* 画像の高さと幅の設定 */
  height: 400px;
  width: 100%;

  /* パララックス効果 */
  background-image: url("~~/sample.jpg");
  background-attachment: fixed; /* これが一番重要 */
  background-position: center;
  background-size: cover;
  background-repeat: no-repeat;
}

視差効果を出すために今回使用しているのは

background-attachmentです。

background-attachmentとは…

CSS のプロパティで、背景画像の位置をビューポートの中で固定するか、包含ブロックと一緒にスクロールするかを設定します。

MDN web docs (https://developer.mozilla.org/ja/docs/Web/CSS/background-attachment)

background-attachment:fixedとすることで、背景画像が固定されます。

これにより、ユーザーがページをスクロールしても背景画像は動かず、

その前面にあるコンテンツだけが移動します。

これがいわゆる視差効果、パララックスと呼ばれるものです。

その他のbackground-○○は画像の位置調整用です。

background-attachment、これだけでできるんか!

ただし!iOS Safariなどに注意

ただしこのbackground-attachmentは万能ではありません。

というのも、iOS Safariなど一部のブラウザでは機能しないのです。(2024年4月時点)

出典:caniuse.com

ではどうすればいいのか。

これと同等のことを行えるコードを書けばOK!

iOS Safari対応版のコード

というわけでiOS Safari対応版のコードはこちら↓

See the Pen parallax-attachment2-iOS Safari by WEB-DEN (@Yukiwebcreate) on CodePen.

こちら何を行っているかと言いますと、HTMLの構造とCSSに変化を加えています。

簡単にいうと、パララックスの背景画像を当てたい要素に疑似要素をつけて、

その疑似要素に画像を固定させています

どういうことか見ていきましょう。

<div class="parallax-parent">
  <div class="content">
    <h1>上部のテキストコンテンツ</h1>
    <p>こちらはテキストのサンプルです。</p>
  </div>
  <!-- パララックス効果のセクション -->
  <div class="parallax-window"></div>

  <div class="content">
    <h1>下部のテキストコンテンツ</h1>
    <p>こちらもテキストのサンプルです。</p>
  </div>
</div>

contentクラスは無視してOKです。

ここでは、parallax-parentとparallax-windowにご注目ください。

CSSは下記のような感じ

* {
  margin: 0;
  padding: 0;
}
.parallax-parent {
  height: 900px;
}
.parallax-window {
  height: 500px;
}
.parallax-parent:before {
  background-image: url("xxx.jpg");
  background-repeat: no-repeat;
  background-position: center;
  background-size: cover;
  content: "";
  position: fixed;
  top: 0;
  right: 0;
  bottom: 0;
  left: 0;
  z-index: -1;
}
.content {
  background-color: #fff;
  padding: 100px 0;
  text-align: center;
}

parallax-parentに疑似要素:beforeをつけて、そこに画像やposition:fixedを設定しています。

そしてparallax-windowは今回は背景画像を見るためののぞき窓みたいなもんです。

※テキストなど高さのあるコンテンツがparallax-windowエリアにあればheightは必要ありません。今回は中身が空なので無理やり高さを持たせるためにheightを設定してます。

また、z-index: -1がないと背景画像が最前面に出てきてしまうので、必ず設定しましょう。

このようにすれば「background-attachment:fixed」を使用しなくても同様のパララックスが実装でき、

iOSのSafariなどにも対応させることができます

まとめ

非対応ブラウザを無視できるのであれば、視差効果(パララックス)を表現するにはbackground-attachment:fixedとするだけで実現可能です。むっちゃ簡単ですね。

iOS Safariには今のところbackground-attachmentに対応する予定はなさそう?なので、対応版の実装方法も覚えておくといいでしょう!

万能な方がいいからSafari対応版で覚えておこうかな

 

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次