또렷한 버튼 반응
.btn { transition: transform 180ms cubic-bezier(0.4, 0, 0.2, 1);}.btn:hover { transform: translateY(-2px);}상승의 대부분이 초반에 일어나고 끝에서 부드럽게 안정됩니다. 굼뜨지 않고 커서 움직임에 반응하는 느낌이 들죠.
라이브 애니메이션 미리보기로 커스텀 CSS 이징 곡선을 설계.
마지막 업데이트
Coddy teaches you by writing real code in your browser - interactive lessons, instant feedback, and AI help when you get stuck.
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 단축에 넣을 수 있고, 키프레임 쌍마다 다른 이징을 적용할 수도 있습니다.