OmochiXを検索

Esc で閉じる

カメラワーク #023

オービット Orbit

被写体のまわりをカメラが回る

被写体を中心にカメラが円を描いて回るオービット。Web 上では被写体を 3D 回転させて、回り込む見え方を再現しています。

調整する

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

AIへの頼み方

製品カードのまわりをカメラが一周するように、カードをゆっくり回して見せて。6秒で1周、一定の速さ。

動きの仕様

  • 親に perspective: 600px、要素に transform-style: preserve-3d を指定する
  • transform: rotateY(0)→rotateY(360deg) を 6 秒、linear で繰り返す
  • 足元に楕円の影を置いて浮いて見えないようにする
  • 動かすのは transform だけ
  • prefers-reduced-motion では静止させる

使いどころ

製品紹介、カード型コンテンツの見せ方、3D 風の導入。動画生成AIには「camera orbits slowly around the product, one full turn in 6 seconds」のようにカメラワークの語彙で指示する(Web 上の再現であり、生成結果を保証するものではない)。

コピーされるプロンプト全文を見る
「オービット(Orbit)」の動きを実装してください。
OmochiX Learn の動く見本 #023(カメラワーク)です。

頼み方の例: 製品カードのまわりをカメラが一周するように、カードをゆっくり回して見せて。6秒で1周、一定の速さ。
どんな動きか: 被写体のまわりをカメラが回る
見本で起きること: 被写体を中心にカメラが円を描いて回るオービット。Web 上では被写体を 3D 回転させて、回り込む見え方を再現しています。
仕様:
- 親に perspective: 600px、要素に transform-style: preserve-3d を指定する
- transform: rotateY(0)→rotateY(360deg) を 6 秒、linear で繰り返す
- 足元に楕円の影を置いて浮いて見えないようにする
- 動かすのは transform だけ
- prefers-reduced-motion では静止させる
使いどころ: 製品紹介、カード型コンテンツの見せ方、3D 風の導入。動画生成AIには「camera orbits slowly around the product, one full turn in 6 seconds」のようにカメラワークの語彙で指示する(Web 上の再現であり、生成結果を保証するものではない)。
調整した値:
- 6sで1周する(既定)
- 360度まで回る(既定)
- 回り方は「一定」(既定)
- カードの色: #6e4bff(既定)

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

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

コード

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

HTML / CSS / JavaScript
<!-- オービット (Orbit) | OmochiX Learn 動く見本 #023 | https://omochix.com/learn/motion/orbit/ -->

<style>
.ob{position:relative;width:260px;height:160px;display:grid;place-items:center;perspective:600px;border-radius:14px;background:radial-gradient(circle at 50% 30%,#2a2440,#141225)}
.ob__card{width:120px;height:76px;border-radius:14px;background:var(--p-color,var(--primary));color:#fff;display:grid;place-items:center;font:700 18px/1 system-ui,sans-serif;letter-spacing:.08em;transform-style:preserve-3d;backface-visibility:visible;animation:ob var(--p-cycle,6s) var(--p-ease,linear) infinite}
.ob__shadow{position:absolute;left:50%;bottom:22px;width:110px;height:14px;margin-left:-55px;border-radius:50%;background:rgba(0,0,0,.45);filter:blur(4px)}
@keyframes ob{from{transform:rotateY(0deg)}to{transform:rotateY(calc(var(--p-angle,360) * 1deg))}}
</style>

<div class="ob"><div class="ob__card"><b>NEW</b></div><i class="ob__shadow"></i></div>