GroundHaus

cubic-bezier 편집기

제어점을 끌어 CSS 애니메이션 이징 곡선을 만듭니다. 실제 애니메이션으로 바로 확인하고 cubic-bezier 값을 복사하세요.

미리보기
CSS
transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);

제어점은 끌어서 옮기거나, 눌러서 선택한 뒤 방향키로 미세 조정할 수 있습니다(Shift와 함께 누르면 10배). y를 0~1 밖으로 보내면 목표를 지나쳤다가 돌아오는 탄성 효과가 됩니다. x는 시간축이라 0~1을 벗어날 수 없습니다.

사용법 · 예제 · 제한 사항

이게 뭔가요?

제어점 두 개를 끌어 CSS 이징 곡선을 만들고, 실제 애니메이션으로 바로 확인합니다. 미리보기는 Web Animations API로 진짜 CSS 이징을 돌리므로 브라우저에서 보게 될 움직임과 같습니다.

곡선을 읽는 법

곡선이 가파른 구간은 빠르게, 완만한 구간은 느리게 움직입니다. 직선이면 처음부터 끝까지 같은 속도(linear)입니다.

cubic-bezier(x1, y1, x2, y2)에서 네 숫자는 가운데 제어점 두 개의 좌표입니다. 시작점 (0,0)과 끝점 (1,1)은 고정이라 적지 않습니다.

x가 0~1로 묶이는 이유

가로축이 시간이기 때문입니다. 시간은 되감기지 않습니다.

제어점의 x가 1을 넘어가면 곡선이 뒤로 접히면서 같은 시각에 진행도가 두 개 생깁니다. 애니메이션이 순간이동하는 셈이라 CSS 규격 자체가 x를 0~1로 제한합니다.

반면 y는 제한이 없습니다. 그래서 재미있는 일이 생깁니다.

y를 1 밖으로 보내면 튕깁니다

y가 1을 넘으면 목표 지점을 지나쳤다가 돌아옵니다. 0 아래로 내리면 반대 방향으로 살짝 물러났다 출발합니다. 둘을 함께 쓰면 이런 값이 됩니다.

transition-timing-function: cubic-bezier(0.68, -0.55, 0.27, 1.55);

뒤로 살짝 당겼다가 튀어나가서 목표를 지나친 뒤 제자리로 돌아옵니다. 버튼 클릭이나 모달 등장에 쓰면 생기가 붙습니다. 다만 과하면 산만해지므로 1.1~1.6 정도가 무난합니다.

기본 이징 값

이름 cubic-bezier 값 느낌
linear (0, 0, 1, 1) 기계적, 로딩바
ease (0.25, 0.1, 0.25, 1) CSS 기본값
ease-in (0.42, 0, 1, 1) 천천히 시작
ease-out (0, 0, 0.58, 1) 빠르게 시작해 부드럽게 멈춤
ease-in-out (0.42, 0, 0.58, 1) 양끝이 부드러움

어떤 걸 골라야 하나

경험적으로 등장에는 ease-out을 쓰는 편이 좋습니다. 사용자가 기다리는 구간이 앞쪽이라, 앞을 빠르게 처리하면 체감 속도가 올라갑니다.

쓰는 법

.card {
  transition: transform 300ms cubic-bezier(0.4, 0, 0.2, 1);
}

JavaScript에서도 같은 문자열을 씁니다.

el.animate([{ opacity: 0 }, { opacity: 1 }], {
  duration: 300,
  easing: 'cubic-bezier(0.4, 0, 0.2, 1)',
});

알아두면 좋은 것

제작·관리 GroundHaus · 오류 제보 · 데이터 처리 안내

자주 묻는 질문

cubic-bezier가 뭔가요?

CSS 애니메이션의 속도 변화를 정하는 곡선입니다. (0,0)에서 (1,1)로 가는 3차 베지어 곡선에서 가운데 제어점 두 개의 좌표를 지정합니다. 가로축은 시간, 세로축은 진행도입니다.

y값을 1보다 크게 하면 어떻게 되나요?

목표를 지나쳤다가 돌아오는 탄성(overshoot) 효과가 됩니다. 튕기는 듯한 느낌을 줄 때 씁니다. y는 0~1을 벗어나도 되지만 x는 시간축이라 0~1로 묶입니다.

x값이 0~1로 제한되는 이유는 뭔가요?

가로축이 시간이기 때문입니다. 시간은 되감기지 않으므로 제어점이 구간 밖으로 나갈 수 없습니다. 나간다면 같은 시각에 진행도가 두 개가 되어버립니다.

ease와 ease-in-out은 뭐가 다른가요?

ease는 cubic-bezier(0.25, 0.1, 0.25, 1)로 시작이 조금 빠르고, ease-in-out은 (0.42, 0, 0.58, 1)로 시작과 끝이 대칭입니다. ease가 CSS의 기본값입니다.

어디에 붙여 쓰나요?

transition-timing-function이나 animation-timing-function에 넣습니다. JavaScript의 Web Animations API에서는 easing 옵션에 같은 문자열을 씁니다.