CSS cubic-bezier 가속도 조절 & 모션 플레이어

HOT

3차 베지어 곡선 인터랙티브 조절 및 표준 ease 모션과의 실시간 가속도 비교 플레이어

ADVERTISEMENT · TOP BANNER

Responsive 728x90 / 320x100 Ad Slot

(CLS Prevention Active · Zero Shift)
100% 브라우저 연산 (서버 전송 없음, 개인정보 안전)
Interactive Client Mode
CSS cubic-bezier 가속도 조절 & 모션 플레이어
P1: (0.34, 1.56)P2: (0.64, 1)
제어점 좌표 설정 (0.0 ~ 1.0 / 오버슈트)
X1 (Time)0.34
Y1 (Progression)1.56
X2 (Time)0.64
Y2 (Progression)1
재생 시간 (Duration)1.2s
표준 프리셋

실시간 모션 비교 플레이어

현재 커스텀 베지어cubic-bezier(0.34, 1.56, 0.64, 1)
Custom
Linear (기준선)linear
Linear
transition: all 1.2s cubic-bezier(0.34, 1.56, 0.64, 1);
ADVERTISEMENT · HIGH CTR IN-FEED

Native In-Feed / High Viewability Ad Slot

(CLS Prevention Active · Zero Shift)

3차 베지에(Cubic Bézier) 곡선과 물리 기반 인터랙션 모션의 수학적 역학

인간은 일상생활 속에서 관성(Inertia), 중력(Gravity), 공기 저항과 마찰력이라는 물리 법칙에 끊임없이 노출되어 있습니다. 따라서 현실 세계의 모든 물체는 정지 상태에서 최고 속도로 순간 이동하지 않으며, 반드시 가속(Acceleration)과 감속(Deceleration)의 과정을 거칩니다. 만약 웹 인터페이스에서 모달 팝업이 뜨거나 드롭다운 메뉴가 펼쳐질 때 일정한 속도로 움직이는 `linear` 애니메이션을 사용하면, 사용자의 뇌는 이를 기계적이고 부자연스러우며 불쾌한 인공물로 인지하게 됩니다.

CSS3의 `cubic-bezier(x1, y1, x2, y2)` 타이밍 함수는 시간(Time)의 흐름 대비 인터랙션 진행률(Progression)을 2개의 제어점(Control Points)을 가진 3차 매개변수 곡선으로 완벽하게 제어합니다. 시작점 P0(0, 0)과 끝점 P3(1, 1) 사이에서 조절점 P1과 P2의 좌표를 조작함으로써, 애플 네이티브 앱 특유의 묵직한 감속(Ease-Out), 생동감 넘치는 탄성 바운스(Overshoot), 그리고 극적인 출발 감속(Ease-In-Out)을 한 줄의 CSS 코드로 연출할 수 있습니다.

오르보킷 3차 베지에 이징 곡선 생성기는 인터랙티브 캔버스 위에서 제어점을 직접 드래그하여 가속도 곡선을 시각적으로 설계할 수 있습니다. 표준 CSS 이징 프리셋부터 기계적 한계를 벗어나는 바운스 탄성 곡선까지 실시간 애니메이션 비교 플레이어를 통해 확인하고, 브라우저 GPU 가속에 최적화된 transition 및 animation CSS 코드를 즉시 복사할 수 있습니다.

3차 베지에 다항식과 X/Y 좌표계의 물리학적 제약 조건

시간 축과 진행 축을 매개변수 t(0 ≤ t ≤ 1)로 정의하는 베르크슈타인 기저 다항식(Bernstein Polynomials) 원리입니다.

3차 베지에 곡선의 2차원 매개변수 방정식Mathematical Formulation
B(t) = (1-t)³P₀ + 3(1-t)²tP₁ + 3(1-t)t²P₂ + t³P₃ (0 ≤ t ≤ 1)

시작점 P0은 (0,0), 끝점 P3은 (1,1)로 고정됩니다. X축은 시간의 흐름을 나타내므로 반드시 0 ≤ X ≤ 1 범위여야 하지만, 진행률인 Y축은 1보다 크거나 음수일 수 있어 탄성 오버슈트를 구현합니다.

부드럽고 묵직한 감속을 구현하는 애플 스타일 Ease-Out 커브 산출
1단계: 제어점 P1 설정빠른 초기가속을 위해 X1=0.16, Y1=1 설정P1 (0.16, 1.0)
2단계: 제어점 P2 설정끝에서 극도로 부드러운 감속을 위해 X2=0.3, Y2=1 설정P2 (0.3, 1.0)
3단계: 타이밍 함수 합성cubic-bezier(0.16, 1, 0.3, 1)극단적 감속(Deceleration) 곡선 완성
4단계: CSS transition 적용transition: transform 0.4s cubic-bezier(0.16, 1, 0.3, 1);모달 바텀시트 열림 애니메이션에 최적

👉 초기 20%의 시간 동안 전체 거리의 80%를 주파한 후 나머지 80% 시간 동안 서서히 안착하는 프리미엄 모션이 완성됩니다.

  • X좌표는 시간(Time)을 의미하므로 물리 법칙상 시간이 거꾸로 흐를 수 없어 0과 1 사이를 벗어나면 CSS 유효성 검사에서 탈락합니다.
  • Y좌표는 목표 진행률(Progress)이므로 1.0을 초과하면 목표 지점을 지나쳤다가 되돌아오는 스프링 튕김(Overshoot) 효과가 발생합니다.
  • CSS 애니메이션 성능 극대화를 위해서는 레이아웃 리플로우를 일으키는 width, top 대신 GPU 컴포지팅 속성인 `transform`과 `opacity`에 적용해야 합니다.
  • 표준 `ease-out`은 `cubic-bezier(0, 0, 0.58, 1)`에 해당하며 진입 애니메이션에 가장 널리 권장됩니다.

주요 표준 및 커스텀 이징(Easing) 곡선 스펙 비교표

UI 인터랙션 목적에 따른 최적의 베지에 매개변수 및 권장 애니메이션 시간(Duration) 가이드입니다.

이징 명칭cubic-bezier 매개변수가속도 특성권장 지속 시간최적의 UI 인터랙션 용도
linearcubic-bezier(0, 0, 1, 1)처음부터 끝까지 일정한 속도1초 이상 (연속)로딩 프로그레스 바, 무한 회전 스피너
easecubic-bezier(0.25, 0.1, 0.25, 1)약간 가속 후 완만하게 감속250ms ~ 350ms브라우저 기본값, 범용 인터랙션
ease-incubic-bezier(0.42, 0, 1, 1)천천히 시작하여 가속하며 끝남150ms ~ 200ms화면 밖으로 퇴장(Exit)하는 요소, 닫기 버튼
ease-outcubic-bezier(0, 0, 0.58, 1)빠르게 시작하여 끝에서 부드럽게 감속250ms ~ 400ms화면 안으로 등장(Enter)하는 모달, 드롭다운
ease-in-outcubic-bezier(0.42, 0, 0.58, 1)천천히 시작해 중간 가속 후 감속300ms ~ 500ms캐러셀 슬라이더 카드 전환, 페이지 스크롤
Spring Overshootcubic-bezier(0.34, 1.56, 0.64, 1)목표치를 150% 튕겨 넘어선 후 복귀400ms ~ 600ms모바일 바텀 시트, 좋아요 하트 팝업, 배지
Anticipation Easecubic-bezier(0.6, -0.28, 0.735, 0.045)뒤로 살짝 물러섰다가 빠르게 돌진300ms ~ 450ms로켓 발사 모션, 게임풍 카드 뒤집기

* Y값이 1을 초과하는 오버슈트 곡선은 사용자의 시각적 즐거움(Delight)을 극대화하지만 남발 시 어지러움을 유발할 수 있습니다.

ADVERTISEMENT · IN-ARTICLE CONTENT

High-Engagement In-Article Native Ad Slot

(CLS Prevention Active · Zero Shift)

사용 방법

11. 캔버스 제어점(Control Points) 인터랙티브 드래그

캔버스 위에서 P1(X1, Y1)과 P2(X2, Y2) 핸들을 마우스나 터치로 드래그하여 가속/감속 곡선 형태를 만듭니다.

22. 검증된 모션 이징 프리셋 로드

ease, ease-in, ease-out, ease-in-out 및 탄성 넘치는 스프링 바운스(Overshoot) 프리셋을 원클릭으로 불러옵니다.

33. 실시간 애니메이션 비교 플레이어 테스트

재생 버튼을 눌러 기본 Linear 등속 운동과 내가 설계한 커스텀 베지에 곡선의 움직임 속도 차이를 눈으로 직접 비교합니다.

44. 프로덕션 CSS 코드 원클릭 복사

완성된 `cubic-bezier(x1, y1, x2, y2)` 수식과 지속 시간(duration)이 포함된 CSS transition 속성을 복사합니다.

실무 인터랙티브 모션 디자인 적용 사례

고급스러운 앱 감성을 웹 인터페이스에 주입하는 프로덕션 적용 사례입니다.

iOS 네이티브 감성의 바텀 시트(Bottom Sheet) 모달

화면 아래에서 올라올 때 cubic-bezier(0.32, 0.72, 0, 1)를 적용하여 손가락 관성에 안착하는 느낌 연출.

쇼핑몰 장바구니 담기 성공 아이콘 펄스

아이콘 크기가 1.3배로 살짝 튕겼다 제자리로 돌아오는 탄성 스프링 이징으로 클릭 만족감 제고.

반응형 네비게이션 드로어 메뉴 슬라이드

사이드 메뉴가 열릴 때는 ease-out(300ms)으로 빠르게, 닫힐 때는 ease-in(200ms)으로 민첩하게 닫히도록 분리 설계.

전자상거래 제품 카드 호버 마이크로 인터랙션

150ms 초고속 ease-out 스케일 애니메이션으로 마우스 이동에 즉각 반응하는 매끄러운 조작감 완성.

💡 모션 그래픽 전문가가 전하는 60fps/120fps 애니메이션 팁

✓ 퇴장(Exit)은 진입(Enter)보다 항상 빠르게

요소가 나타날 때는 사용자가 인지할 수 있도록 300ms ease-out을 쓰고, 사라질 때는 조작을 방해하지 않도록 150~200ms ease-in으로 민첩하게 퇴장시키세요.

✓ transform과 opacity 이외의 속성 애니메이션 금지

width, height, top, margin 속성에 베지에 이징을 걸면 매 프레임마다 레이아웃 리플로우가 발생해 화면이 뚝뚝 끊깁니다. 반드시 transform(translate, scale)을 사용하세요.

✓ 접근성 미디어 쿼리(prefers-reduced-motion) 필수 고려

전정기관 장애가 있는 사용자를 위해 `@media (prefers-reduced-motion: reduce)` 환경에서는 과도한 탄성 애니메이션을 끄거나 단순 페이드로 대체해야 합니다.

✓ Tailwind CSS에서 커스텀 베지에 등록하기

`tailwind.config.js`의 `theme.extend.transitionTimingFunction`에 이름을 붙여 등록하면 `ease-spring` 등의 클래스로 전역에서 재사용할 수 있습니다.

⚠️ 흔히 하는 실수 & 예방법

❌ X축 조절점을 0 미만이나 1 초과로 드래그하여 CSS 브라우저 무효화
✅ 시간 역행은 물리적으로 불가능하므로 X1과 X2는 항상 0.0과 1.0 사이에 머물러야 합니다.
❌ Y축 오버슈트를 2.0 이상으로 과도하게 설정하여 화면 밖으로 요소가 튕겨 나가는 오류
✅ 탄성 애니메이션의 Y값은 1.1~1.5 범위 내에서 절제감 있게 사용해야 부작용이 없습니다.
❌ 지속 시간(Duration)을 800ms 이상으로 너무 길게 주어 사용자를 답답하게 만드는 실수
✅ 웹 UI 마이크로 인터랙션의 이상적인 지속 시간은 200ms~400ms 사이입니다. 애니메이션을 감상시키려 하지 마세요.
❌ 서로 다른 컴포넌트마다 제각각의 베지에 커브를 난사하여 일관성을 해치는 경우
✅ 프로젝트 전역에서 진입용 1개, 퇴장용 1개, 탄성용 1개 등 최대 3개의 일관된 모션 토큰을 정의하여 통일성을 유지하세요.

자주 묻는 질문 (FAQ)

사용자 및 전문가들이 가장 자주 묻는 핵심 질문과 명확한 해답입니다.

6 Q&As

네, 가능합니다! Y축은 목표 지점 진행률을 의미하므로 Y값이 1.0을 넘으면 요소를 목표 지점보다 살짝 더 멀리 밀어냈다가 당겨오는 탄성 오버슈트(Elastic Bounce) 효과가 연출되며, 음수면 뒤로 살짝 웅크렸다가 출발하는 효과가 납니다.

ADVERTISEMENT · FOOTER BANNER

Wide Responsive Banner

(CLS Prevention Active · Zero Shift)