OmochiXを検索

Esc で閉じる

スクロール演出 #016

パララックス Parallax

奥と手前で動く速さが違う

太陽・遠くの山・手前の丘が、それぞれ違う速さで上下に動き、奥行きが生まれます。

調整する

値を変えるとプレビューに反映され、「プロンプトをコピー」「コードをコピー」も調整後の内容になります。

AIへの頼み方

ヒーローの背景をパララックスにして。奥のレイヤーはゆっくり、手前は速く動く感じで。

動きの仕様

  • 背景・中景・前景の3レイヤーに分け、スクロール量 × 係数(0.1 / 0.3 / 0.6)で translateY を変える
  • 更新は requestAnimationFrame の中でまとめ、transform だけを変更する
  • prefers-reduced-motion の環境ではレイヤーを固定する
  • スマホでは係数を半分にして酔いを防ぐ

使いどころ

ヒーロー背景、ブランドサイトの装飾、ストーリーテリング型LP。

コピーされるプロンプト全文を見る
「パララックス(Parallax)」の動きを実装してください。
OmochiX Learn の動く見本 #016(スクロール演出)です。

頼み方の例: ヒーローの背景をパララックスにして。奥のレイヤーはゆっくり、手前は速く動く感じで。
どんな動きか: 奥と手前で動く速さが違う
見本で起きること: 太陽・遠くの山・手前の丘が、それぞれ違う速さで上下に動き、奥行きが生まれます。
仕様:
- 背景・中景・前景の3レイヤーに分け、スクロール量 × 係数(0.1 / 0.3 / 0.6)で translateY を変える
- 更新は requestAnimationFrame の中でまとめ、transform だけを変更する
- prefers-reduced-motion の環境ではレイヤーを固定する
- スマホでは係数を半分にして酔いを防ぐ
使いどころ: ヒーロー背景、ブランドサイトの装飾、ストーリーテリング型LP。
調整した値:
- 片道の長さは4s(既定)
- 各レイヤーの移動量は既定の1倍(既定)
- 太陽の色: #d97706(既定)
- 手前の丘の色: #6e4bff(既定)

実装の条件:
- HTML / CSS(必要なら素のJavaScript)で、外部ライブラリは使わない
- 見本の形・タイミング・イージングの数値はそのまま使い、文字・色・素材だけ今作っているものに合わせる
- prefers-reduced-motion: reduce の環境では動きを止めるか最小限にする
- 使った技術: CSS

見本(動くプレビューと参考コード): https://omochix.com/learn/motion/parallax/

コード

プレビューで動いているものと同じコードです。HTMLに貼り付ければそのまま動きます。

HTML / CSS / JavaScript
<!-- パララックス (Parallax) | OmochiX Learn 動く見本 #016 | https://omochix.com/learn/motion/parallax/ -->

<style>
.px{position:relative;width:280px;height:160px;overflow:hidden;border-radius:14px;background:linear-gradient(180deg,var(--bg),var(--surface))}
.px__sun{position:absolute;top:26px;right:50px;width:40px;height:40px;border-radius:50%;background:var(--p-sun,var(--amber));animation:px-move var(--p-cycle,4s) ease-in-out infinite alternate;--d:-8px}
.px__far{position:absolute;left:-20px;right:-20px;bottom:30px;height:90px;background:var(--blue);opacity:.35;clip-path:polygon(0 100%,15% 45%,30% 70%,48% 25%,62% 60%,78% 35%,100% 70%,100% 100%);animation:px-move var(--p-cycle,4s) ease-in-out infinite alternate;--d:-22px}
.px__near{position:absolute;left:-30px;right:-30px;bottom:-10px;height:70px;background:var(--p-near,var(--primary));border-radius:50% 50% 0 0;animation:px-move var(--p-cycle,4s) ease-in-out infinite alternate;--d:-50px}
@keyframes px-move{from{transform:translateY(0)}to{transform:translateY(calc(var(--d) * var(--p-depth,1)))}}
</style>

<div class="px"><span class="px__sun"></span><span class="px__far"></span><span class="px__near"></span></div>