모션
상태 변화에 맞는 모션을 고르고 공통 지속 시간과 이징 토큰을 사용하며 모션을 줄여도 의미를 유지해요.
상태 변화에 맞게 선택
원인과 결과를 연결하는 데 도움이 될 때만 모션을 사용해요. 직접 입력 피드백은 즉시 느껴져야 하고, 가까운 플로팅 콘텐츠는 맥락을 보여 주기 위해 조금 더 시간을 쓸 수 있어요. 작업 맥락이 바뀌는 진입에는 가장 느린 단계를 사용할 수 있어요. 바뀌지 않은 콘텐츠는 움직이지 마세요.
지속 시간과 이징
하나의 변화, 세 가지 반응 속도
실제 제품 지속 시간을 사용하며 재생을 선택한 뒤에만 움직여요.
- fast
120ms누름에 연결된 피드백시작완료 - normal
160ms메뉴, 툴팁, 기준점이 있는 레이어시작완료 - slow
180ms작업 맥락 변화시작완료
지속 시간 비교를 재생할 준비가 됐어요.
양방향 상태 변화에는 standard, 인터페이스에 들어오는 콘텐츠에는 easeOut, 반복 주기에만 linear를 사용해요.
같은 시간, 다른 리듬
곡선을 비교하기 위해 480ms를 사용해요. 제품 컴포넌트는 지속 시간 토큰을 사용해요.
- standard
ease양방향 상태 변화시작완료 - easeOut
ease-out인터페이스에 들어오는 콘텐츠시작완료 - linear
linear반복 진행 상태만시작완료
이징 비교를 재생할 준비가 됐어요.
로딩은 반복 주기
loading은 진입 시간이 아니라 2.4s 반복 주기예요. 스피너나 스켈레톤처럼 진행률을 알 수 없을 때만 선형 주기를 사용하세요. 필요한 경우 작업 이름을 표시하고, 완료되면 반복을 멈추며, 진행률을 알 수 있으면 확정형 진행 상태를 보여 주세요.
실제 상호작용 패턴
Flutter의 터치와 스타일러스 대상은 pointer down에서 pressed 피드백을
시작해요. 색상은 immediate와 easeOut으로 진입하고 fast와
standard로 돌아와요. 짧은 탭도 최소 표시 시간을 기다리지 않고 손을
뗄 때 활성화되며, 스크롤이나 취소로 바뀌면 활성화 없이 이전 상태로
복귀해요.
- 버튼, 토글, 탭, 스위치는 한 컴포넌트 안의 상태 변화에 빠른 피드백을 사용해요.
- 메뉴, 툴팁, 팝오버, 선택 목록은 가까운 맥락을 보여 줘요.
- 대화 상자와 드로어는 활성 작업 맥락을 바꾸므로 더 느린 진입을 사용할 수 있어요.
- 진행 상태와 스켈레톤은 작업 진행률을 모르는 동안 로딩 주기를 사용해요.
의미를 유지하며 모션 줄이기
prefers-reduced-motion: reduce에서는 장식 이동과 큰 변형을 제거하되 최종 상태, 상태 텍스트, 포커스 이동, 의미 기반 피드백은 유지하세요.
이동은 줄이고 상태 변화는 유지
시스템의 모션 줄이기 설정을 따라요. 모션 줄이기 미리보기는 결과를 유지하면서 장식 이동을 제거해요.
모션 줄이기 미리보기를 재생할 준비가 됐어요.
구현과 참고
.rack-status { transition: background-color var(--tinyrack-duration-fast) var(--tinyrack-ease-standard); }
@media (prefers-reduced-motion: reduce) { .rack-panel { transition: none; transform: none; } }
| 그룹 | 토큰 | 값 |
|---|---|---|
| 지속 시간 | fast | 120ms |
| 지속 시간 | normal | 160ms |
| 지속 시간 | slow | 180ms |
| 지속 시간 | number | 600ms |
| 지속 시간 | loading | 2.4s |
| 이징 | standard | ease |
| 이징 | easeOut | ease-out |
| 이징 | linear | linear |