27P by xguru 2023-03-20 | favorite | 댓글과 토론

생각하는 것보다 더 짧게 할 것

  • 단일 트랜지션은 0.15~0.4초
  • 너무 빠르다고 생각될 때까지 빠르게 한 다음 조금씩 줄이기

액션을 커브에 맞출 것

  • 움직임은 색상만큼 주관적이지만, 그만큰 중요함
  • 실제 세계의 움직임을 생각하고 비교할 것

가속과 감속

  • 애니메이션이 부자연 스럽다면 갑자기 시작하거나 끝나기 때문
  • 미미하더라도 cubic-bezier 커브에 easing-in/out을 추가하는 게 좋음
  • 실제처럼 보이려면 "관성(Inertia)"도 좋음

적을수록 좋음

  • 애니메이션 중에 엘리먼트가 더 많이 변경될 수록, 더 과도하게 보일 위험이 커짐
  • 투명도가 0에서 1로 간다면 1대신 0.4를 시도해보기. 사이즈를 변경한다면 조금만 작은 크기에서 시작해보기
  • 대부분의 경우 자기 자리로 찾아가는 애니메이션은 5~40픽셀 사이에서 움직여야함

브라우저 기본값은 피할 것

  • 브라우저에는 linear, ease, ease-in, ease-out, ease-in-out 같은 커브가 내장
  • 편하고 특정 상황에서는 유용하지만, 너무 일반적이어서 다 똑같아 보임 (마치 Bootstrap/Tailwind로 만든 사이트가 다 비슷해 보이는 것처럼)
  • VS Code에 있는 cubic-bezier 커브의 자동 완성값을 사용해 볼 것
  • 또는 브라우저 개발자 도구를 열고 커브 편집기를 사용해 볼 것

여러가지 속성, 여러가지 easing

  • 항상 유용한 것은 아니지만, 여러개의 속성을 한번에 변경해야 할 때 (transform 과 opacity를 동시에)
    • 같은 cubic-bezier 커브를 적용하면 괜찮게 보일때도 있지만, 실제로 안그럴 때가 있음
    • transform에 잘 동작하는 커브도 fade에는 잘 안어울릴 수 있음
    • 이럴때는 CSS 속성별로 서로 다른 easing을 선택하는게 좋음
  • 속성별로 @keyframes 애니메이션을 나누거나, 여러개의 transition 선택 가능
    • opacity 에는 linear, transform 에는 cubic-bezier(.5, 0, .5, 1)

엇갈린 지연 사용

  • 여러개의 엘리먼트를 트랜지션할때 animation-delay 또는 transition-delay의 효과를 과소평가 하지 말 것

In은 나가고, Out은 들어감

  • 이징 커브는 세가지 종류가 있음
    • ease in (느리게 시작)
    • ease out (느리게 끝남)
    • in-out (가운데만 빠르고, 시작과 끝에선 느림)
  • 트랜지션의 까다로운 점은, 종종 in 을 ease-out 하고 싶고, out 이 ease-in 되고 싶을 때가 있다는 것
    • 하나가 나가고 하나가 들어오는 애니메이션은, 사용자 입장에선 하나의 전환으로 보이지만, 내부에선 두개의 전환임
    • 나가는 것은 천천히 하고 싶으니까 ease-in이 필요하고, 들어오는 것은 ease-out 이 되어야 함

하드웨어 가속에 의존하기

  • 모든 CSS 속성이 모든 장치 & 브라우저에서 원활히 동작하는 것은 아님
  • 항상 하드웨어 가속 가능한 속성
    • transform(모든 translate, scale, rotate 및 3D 버전까지)
    • opacity
  • 경우에 따라 하드웨어 가속 가능한 속성
    • 특정 SVG 속성들
    • filter (브라우저 및 필터에 따라)
  • 캔버스 및 WebGL도 하드웨어 가속이 되지만 여기서는 다루지 않음
  • 즉, 이동, 크기 조정, 회전 하려면 항상 CSS tranform 속성을 사용할 것
  • 뭘하든 엘리먼트의 크기나 위치를 직접 변경하지 말 것
    • height, width, border, margin, padding 같이 페이지 레이아웃에 영향을 미치는 속성을 직접 변경하면 페이지 속도가 눈에 띄게 느려질 위험이 있음

필요시 will-change 사용하기

  • 이론적으로는 애니메이션이 부드럽고 성능이 좋아야 하는데, 부자연스러워 보인다면 will-change 속성을 사용할 것
  • 뭐가 변경될지 미리 알려주므로, 다른 계산을 건너 뛸 수 있음

보너스 : 사용자의 선호도를 존중하기

  • 사용자는 기기 설정에서 "reduced motion"을 선호하는지 지정 가능
  • 미디어 쿼리를 이용하거나 자바스크립트를 통해 이 값을 인식하고, 맞게 대응 가능