또렷한 버튼 반응
.btn { transition: transform 180ms cubic-bezier(0.4, 0, 0.2, 1);}.btn:hover { transform: translateY(-2px);}상승의 대부분이 초반에 일어나고 끝에서 부드럽게 안정됩니다. 굼뜨지 않고 커서 움직임에 반응하는 느낌이 들죠.
라이브 애니메이션 미리보기로 커스텀 CSS 이징 곡선을 설계.
마지막 업데이트
.element {
transition: transform 1.2s cubic-bezier(0.25, 0.1, 0.25, 1);
}CSS의 *이징 함수* 는 애니메이션이 진행 시간 동안 어떻게 가속·감속하는지를 정합니다. ease, ease-in, ease-out, ease-in-out 키워드는 네 가지 특정 곡선의 단축어죠. 그 너머로 가고 싶을 때 CSS는 cubic-bezier() 를 줍니다 - 숫자 네 개로 원하는 곡선을 그려 주는 함수입니다.
이 네 숫자는 두 제어점(x1, y1, x2, y2)의 좌표예요. 손으로 쓰면 번거롭습니다. 작은 수치 변화가 큰 시각적 변화를 만들고, 살짝 오버슈트만 들어가도 *튀는 듯한* 움직임이 되는데 그 감각은 숫자만 봐서는 안 보이거든요. 비주얼 에디터로 핸들을 끌면 곡선이 즉시 반응해, 소숫점을 일일이 만지는 것보다 훨씬 빠릅니다.
Coddy 에디터는 곡선을 실시간으로 그리고, 미리보기 공을 직접 만든 이징으로 굴려 보여 줍니다. 자주 쓰는 패턴-CSS 키워드, Material Design 의 *standard*, 살짝 튀는 bouncy out, 오버슈트 anticipate-을 프리셋으로 묶었습니다. 만든 cubic-bezier() 문자열을 복사해 CSS에 붙이세요. 모든 처리는 브라우저 안에서 일어납니다.
linear, 단위 시간당 진행이 같다는 뜻이에요.원하는 감각에 가까운 프리셋을 먼저 누르세요. UI 모션이라면 *Material standard* 와 *Bouncy out* 이 좋은 출발점. 등장 애니메이션의 안전한 기본값은 *ease-out* 입니다.
컬러 점이 제어점입니다. 첫 번째를 끌어 *시작* 을, 두 번째를 끌어 *끝* 을 조정하세요. 캔버스 위쪽으로 끌면 오버슈트가 생깁니다.
실제 사용 시간을 입력해 보세요. UI 트랜지션은 보통 150–300ms, 강조 동작은 400–600ms. *Replay* 로 새 설정으로 다시 재생할 수 있습니다.
정확한 값이 필요하면 X1/Y1/X2/Y2 입력란에 직접 적으세요. Y는 0..1을 벗어날 수 있지만 X는 항상 0..1 사이입니다.
*복사* 를 눌러 전체 transition 규칙을 가져오세요. 스타일시트에 붙여 넣고 transform 을 실제로 애니메이션할 속성으로 바꾸면 됩니다.
자주 쓰는 이징과 그 안의 cubic-bezier 값. CSS 키워드 네 개는 모두 특정 곡선의 별칭입니다.
| 이징 | cubic-bezier 값 | 쓰기 좋은 곳 |
|---|---|---|
ease | (0.25, 0.1, 0.25, 1) | transition 기본 - 부드럽지만 평범 |
linear | (0, 0, 1, 1) | 등속 - UI엔 보통 부적합, 스피너엔 적합 |
ease-in | (0.42, 0, 1, 1) | 느리게 시작·빠르게 끝 - 퇴장에 적합 |
ease-out | (0, 0, 0.58, 1) | 빠르게 시작·천천히 끝 - 등장/반응에 적합 |
ease-in-out | (0.42, 0, 0.58, 1) | 대칭 - 토글처럼 왕복하는 동작에 좋음 |
| Material standard | (0.4, 0, 0.2, 1) | 산뜻한 모던 UI 모션 |
| Bouncy out | (0.18, 0.89, 0.32, 1.28) | 목표 지나친 뒤 안정 - 장난기 있는 등장 |
.btn { transition: transform 180ms cubic-bezier(0.4, 0, 0.2, 1);}.btn:hover { transform: translateY(-2px);}상승의 대부분이 초반에 일어나고 끝에서 부드럽게 안정됩니다. 굼뜨지 않고 커서 움직임에 반응하는 느낌이 들죠.
.card { transition: transform 350ms cubic-bezier(0.18, 0.89, 0.32, 1.28);}Y2 가 1.28 이라서 목표 지점을 넘어갔다가 되돌아옵니다. 강조 포인트로만 쓰세요 - 모든 동작에 적용하면 금세 산만해집니다.
.hero { transition: transform 500ms cubic-bezier(0.68, -0.55, 0.27, 1.55);}Y1 이 음수면 애니메이션이 잠깐 *반대 방향* 으로 갔다가 목표로 향합니다. 클래식 애니메이션의 손기술 - 살짝의 안티시페이션이 주요 동작을 "의도된 움직임" 처럼 보이게 합니다.
ease-in 쓰기. 느리게 시작해 빠르게 끝나, 반응성과 정반대로 들립니다. 등장엔 ease-out 을 쓰세요.linear 적용. 등속 모션은 기계적으로 보입니다. 진행률 바나 스피너엔 맞지만 그 외 자리엔 적합하지 않아요.cubic-bezier() 의 숫자 네 개는 무엇을 뜻하나요?cubic-bezier(x1, y1, x2, y2). 첫 번째 점은 *시작*, 두 번째 점은 *끝* 의 모양을 결정해요. X는 항상 0~1(시간), Y는 오버슈트·안티시페이트 효과를 위해 0..1을 벗어날 수 있습니다(진행도).cubic-bezier(0.4, 0, 0.2, 1). 퇴장에는 *ease-in*. 진행률 표시가 아니라면 *linear* 는 피하세요.ease 와 ease-out 의 차이는?ease 는 시작도 부드러워요. ease-out 은 처음부터 최고 속도로 출발해 점점 감속합니다 - 이 *즉각적인 출발* 이 더 반응 좋게 느껴지는 이유입니다.cubic-bezier(0.18, 0.89, 0.32, 1.28) 은 목표를 약 28% 지나친 뒤 안정합니다. 여러 번 튀게 하려면 @keyframes 나 spring 라이브러리가 필요합니다 - cubic-bezier는 오버슈트가 한 번뿐이에요.@keyframes 와 cubic-bezier 를 같이 쓸 수 있나요?animation-timing-function 으로 쓰거나 animation 단축에 넣을 수 있고, 키프레임 쌍마다 다른 이징을 적용할 수도 있습니다.