[ CSS ] CSS 애니메이션과 JS 애니메이션 차이

혜빈·2024년 9월 14일

보충내용

목록 보기
27/38

기본 배경

  • 웹에서 애니메이션은 사용자 경험 향상, 시각적 피드백 제공 등의 기능을 함
  • 애니메이션 생성은 CSS 애니메이션, JavaScript 애니메이션 두 가지 접근법이 있음

브라우저 렌더링의 원리

  • 브라우저가 웹페이지를 렌더링 하는 과정은 크게 Layout, Paint, Composite 세 단계임
  • Layout(Reflow) : 브라우저가 요소의 위치, 크기 계산
  • Paint(Repaint) : 브라우저가 요소의 색상, 텍스트, 이미지 등을 그림
  • Composite : 브라우저가 각 요소를 올바른 순서로 쌓아서 최종 화면을 만듦
  • Reflow : 요소의 크기나 위치가 변경될 때 브라우저가 레이아웃을 다시 계산하는 것

  • Repaint : 요소의 색상이나 텍스트가 변경될 때 브라우저가 요소를 다시 그리는 것

  • 이 중에서 Reflow, Repaint는 웹페이지의 성능에 큰 영향을 미침

  • Repaint는 Reflow보다는 비용이 적지만, 여전히 성능에 영향을 줄 수 있음

  • 따라서 애니메이션을 만들 때는 가능하면 Reflow, Repaint를 최소화 해야 함


CSS 애니메이션

/* keyframes를 사용하여 애니메이션 정의 */
@keyframes slide-in {
  0% {
    transform: translateX(-100%);
  }
  100% {
    transform: translateX(0);
  }
}

.animated-element {
  /* 애니메이션 적용 */
  animation: slide-in 1s ease-out;
}
  • CSS만을 사용하여 웹페이지에서 요소를 애니메이션화 하는 방법
  • CSS의 transition, animation 속성 사용

장점

1. 성능

  • CSS 애니메이션은 브라우저가 GPU(그래픽 처리 장치)를 활용하여 애니메이션을 렌더링 하므로, 복잡한 애니메이션에서도 더 좋은 성능 제공함
  • 또한, transform과 opacity 속성을 변경하는 애니메이션은 Reflow와 Repaint 없이 Composite 단계에서만 처리되므로 성능이 훨씬 좋음

2. 간편성

  • CSS만으로 애니메이션 만들기 때문에 JavaScript보다 쉽고 빠르게 작성 가능

3. 호환성

  • CSS 애니메이션은 모든 현대 브라우저에서 지원됨

단점

1. 제한적인 기능

  • CSS는 프로그래밍 언어가 아니기 때문에 복잡한 상호작용이나 로직 다루기 어려움

2. 복잡한 애니메이션

  • 복잡한 애니메이션을 만들려면 코드가 복잡해지고 관리하게 어려워짐

JavaScript 애니메이션

// 애니메이션 함수 정의
function animate(element) {
  let pos = -100;
  const id = setInterval(frame, 10);
  
  function frame() {
    if (pos >= 0) {
      clearInterval(id);
    } else {
      pos++;
      element.style.transform = `translateX(${pos}%)`;
    }
  }
}

// 애니메이션 실행
const element = document.querySelector('.animated-element');
animate(element);
  • JavaScript를 사용하여 웹페이지에서 요소를 애니메이션화 하는 방법
  • requestAnimationFrame API, JavaScript 애니메이션 라이브러리 사용

장점

1. 유연성

  • 프로그래밍 언어이므로, 복잡한 애니메이션과 상호작용 만들 수 있음

2. 프레임 제어

  • requestAnimationFrame API를 사용하면 프레임 정확히 제어 가능

단점

1. 성능

  • CPU를 사용하여 렌더링 되기 때문에 복잡한 애니메이션에서는 성능 저하 발생 가능
  • 하지만, requestAnimationFrame API를 사용하거나 GPU 가속을 활용하는 라이브러리를 사용하면 이 문제를 해결할 수 있음

2. 복잡성

  • JavaScript는 CSS보다 복잡하기 때문에, 애니메이션을 작성하고 이해하는 데 더 많은 시간, 노력 필요

정리

  • CSS 애니메이션은 간단하고 성능이 좋아 기본적인 애니메이션에 적합하며, JavaScript 애니메이션은 더 복잡하고 동적인 애니메이션이 필요할 때 사용

참고

profile
최강 개발자를 꿈꾸는 병아리

0개의 댓글