- Published on
CSS 애니메이션과 JS 애니메이션 비교
- Authors
- Name
- Inhwan Cho
웹 개발 과정에서 애니메이션은 사용자 경험을 향상시키는 중요한 요소 중 하나입니다.
이 글에서는 CSS 애니메이션과 JavaScript(JS) 애니메이션의 주요 차이점을 설명하고, 각각의 사용 사례를 자세히 살펴볼 것입니다.
CSS 애니메이션
CSS 애니메이션은 CSS 코드를 사용하여 HTML 요소에 애니메이션 효과를 적용하는 방법입니다.
@keyframes
규칙을 사용하여 애니메이션의 중간 상태를 정의하고, 애니메이션 속성을 사용하여 해당 애니메이션을 요소에 적용합니다.
예시:
styles.css
@keyframes example {
from {background-color: red;}
to {background-color: yellow;}
}
div {
width: 100px;
height: 100px;
background-color: red;
animation-name: example;
animation-duration: 2s;
}
위 예시에서는 <div>
요소의 배경색이 빨간색에서 노란색으로 2초 동안 변하는 애니메이션을 만들었습니다.
장점
- 성능: 대부분의 최신 브라우저는 CSS 애니메이션을 하드웨어 가속을 통해 처리하므로, JS 애니메이션에 비해 더 나은 성능을 제공할 수 있습니다.
- 간결성: 복잡한 JavaScript 코드 없이도 몇 줄의 CSS만으로 애니메이션을 구현할 수 있어 코드가 간결해집니다.
- 접근성: CSS 애니메이션은 JavaScript가 비활성화되어 있어도 작동하므로 접근성 측면에서 유리합니다.
단점
- 유연성 부족: 사용자의 행동에 따라서 실시간으로 애니메이션을 변경하는 것이 JS 애니메이션에 비해 제한적입니다.
- 제어: 애니메이션이 시작되고 끝날 때 이벤트 핸들러를 추가하는 것이 JS보다 더 복잡합니다.
JS 애니메이션
JavaScript 애니메이션은 웹 페이지에서 복잡한 애니메이션과 상호 작용을 구현할 수 있게 해주는 기술입니다. JS 애니메이션 라이브러리를 사용하거나 requestAnimationFrame
같은 웹 API를 사용하여 구현할 수 있습니다.
예시:
html
<!DOCTYPE html>
<html>
<head>
<title>JS Animation Example</title>
</head>
<body>
<div id="animateMe">Hello, world!</div>
<script>
var elem = document.getElementById("animateMe");
var pos = 0;
var id = setInterval(frame, 10); // 10 밀리초마다 frame 함수를 호출합니다.
function frame() {
if (pos == 350) {
clearInterval(id);
} else {
pos++;
elem.style.top = pos + 'px';
elem.style.left = pos + 'px';
}
}
</script>
</body>
</html>
위 예시에서는 <div>
요소가 화면을 대각선으로 이동하는 애니메이션을 JavaScript를 사용하여 구현하였습니다.
장점
- 유연성: JavaScript는 사용자의 상호 작용에 따라 실시간으로 애니메이션을 변경하고, 복잡한 로직을 통해 예측할 수 없는 애니메이션을 만들 수 있습니다.
- 제어: 애니메이션의 시작, 중간, 종료 시점에 이벤트 핸들러를 쉽게 추가할 수 있어 애니메이션의 제어가 용이합니다.
단점
- 성능: CSS 애니메이션에 비해 성능이 떨어질 수 있습니다. 특히, 많은 DOM 조작이 필요한 경우 브라우저의 리플로우와 리페인트가 빈번하게 발생합니다.
- 복잡성: 복잡한 애니메이션을 구현하기 위해서는 복잡한 JavaScript 코드가 필요할 수 있습니다.
비교
- JS애니메이션은 보통
GSAP
이나Framer-motion
같은 라이브러리를 사용하여 구현하는게 일반적입니다.
기준 | CSS 애니메이션 | JS 애니메이션 |
---|---|---|
성능 | 높음 | 보통 또는 낮음 |
제어 | 제한적 | 용이 |
유연성 | 낮음 | 높음 |
코드의 복잡성 | 낮음 | 높음 |
접근성 | 좋음 | 보통 |
결론적으로, 간단하고 정적인 애니메이션은 CSS를 사용하여 구현하는 것이 좋으며, 복잡하거나 상호작용이 필요한 동적인 애니메이션의 경우 JavaScript를 사용하는 것이 더 적합할 수 있습니다.
각 프로젝트의 요구 사항과 목표에 따라 적절한 기술을 선택하는 것이 중요합니다.