패럴랙스 뎁스 카드

Parallax depth card

한 장의 이미지를 배경·중경·전경 레이어로 잘라, 시점이 움직일 때 레이어마다 다른 속도로 움직여 실제 깊이가 있는 것처럼 보이게 하는 카드.

다른 이름: Multi-layer parallaxDepth photo
···
html
<div class="pc" id="pc">
  <div class="ly bgl"></div>
  <div class="ly midl"><div class="mnt"></div></div>
  <div class="ly fgl"><div class="fg1"></div><div class="fg2"></div></div>
</div>
css
body{background:#0a0a12}
.pc{position:relative;width:min(90%,340px);height:min(85%,190px);border-radius:16px;overflow:hidden;
  box-shadow:0 24px 50px rgba(0,0,0,.5)}
.ly{position:absolute;inset:-10%;transition:transform .05s linear}
.bgl{background:linear-gradient(180deg,#274b8a 0%,#1a2f5c 60%,#0f1730 100%)}
.midl .mnt{position:absolute;left:-5%;right:-5%;bottom:0;height:46%;
  background:linear-gradient(160deg,#3c5fa8,#22366b);clip-path:polygon(0 100%,0 55%,20% 30%,38% 58%,55% 20%,72% 50%,100% 35%,100% 100%)}
.fgl .fg1{position:absolute;left:6%;bottom:0;width:30%;height:60%;background:#0c1226;border-radius:12px 12px 0 0}
.fgl .fg2{position:absolute;right:10%;bottom:0;width:22%;height:44%;background:#141b34;border-radius:10px 10px 0 0}
js
const bg=document.querySelector('.bgl'), mid=document.querySelector('.midl'), fg=document.querySelector('.fgl');
let t=0;
function frame(){
  t+=0.02;
  const s=Math.sin(t);
  bg.style.transform='translateX('+(s*4)+'px)';
  mid.style.transform='translateX('+(s*14)+'px)';
  fg.style.transform='translateX('+(s*30)+'px)';
  requestAnimationFrame(frame);
}
frame();

2D 사진 한 장은 원래 깊이 정보가 없다. 하지만 배경·중간 피사체·전경 피사체를 레이어로 분리해두면, 시점(마우스나 머리 움직임)이 좌우로 움직일 때 가까운 레이어일수록 더 많이, 먼 레이어일수록 더 적게 이동시켜서 입체감을 만들 수 있다 — 모션 패럴랙스를 인공적으로 재현하는 것이다.

공간 UI에서는 이 기법으로 평범한 사진·카드 콘텐츠에도 "공간감"을 준다. 헤드셋을 살짝 기울이면 사진 속 인물이 배경보다 더 크게 움직여, 정말로 그 자리에 입체로 떠 있는 듯한 착시를 만든다.

데모는 배경·중경·전경 세 겹의 도형을 커서(또는 자동으로 좌우 왕복하는 가상 시점)를 따라 서로 다른 배율로 이동시킨다. 전경이 가장 많이 움직이고 배경은 거의 고정돼 있는 걸 확인해 보세요.

언제 쓰나

사진·카드형 콘텐츠에 가벼운 입체감을 더할 때 씁니다. 움직임 폭을 과하게 주면 어지러움을 유발하니 작게 유지하세요.