**CSS 애니메이션(Animation)과 트랜지션(Transition)**은 웹사이트를 더욱 생동감 있고 직관적으로 만드는 핵심 요소입니다.
이 글에서는 CSS 애니메이션과 트랜지션의 기본 개념, 사용 방법, 고급 기법, 그리고 실전 예제까지 상세히 설명합니다.
1. CSS 애니메이션과 트랜지션이란?
CSS 트랜지션(Transition)이란?
- CSS 속성이 한 상태에서 다른 상태로 변화할 때, 부드럽게 전환하는 효과.
- 예) 버튼이 마우스를 올릴 때 색상이 점진적으로 변하는 효과.
CSS 애니메이션(Animation)이란?
- 키프레임(@keyframes)을 사용해 다양한 스타일 변화를 연속적으로 적용할 수 있음.
- 예) 로딩 스피너, 요소의 이동 효과, 페이드인/페이드아웃 효과 등.
✅ 트랜지션 vs 애니메이션 비교
구분트랜지션 (Transition)애니메이션 (Animation)
적용 방식 | 한 상태에서 다른 상태로 변경될 때만 적용 | 키프레임을 활용해 다단계 애니메이션 가능 |
트리거 | hover, focus, active 등 특정 이벤트 필요 | 자동 실행 또는 JavaScript 제어 가능 |
사용 사례 | 버튼 색상 변경, 메뉴 슬라이드 등 | 로딩 애니메이션, 무한 반복 애니메이션 등 |
2. CSS 트랜지션(Transition) 기본 사용법
1) 기본 트랜지션 적용 방법
아래 예제는 버튼에 마우스를 올릴 때 색상이 부드럽게 변하는 효과를 적용합니다.
css
button {
background-color: blue;
color: white;
padding: 10px 20px;
border: none;
cursor: pointer;
transition: background-color 0.3s ease-in-out;
}
button:hover {
background-color: red;
}
✅ 설명
- transition: background-color 0.3s ease-in-out;
- background-color: 변화를 적용할 속성.
- 0.3s: 애니메이션 지속 시간.
- ease-in-out: 서서히 시작하고 서서히 종료하는 효과.
2) 여러 속성에 트랜지션 적용
트랜지션을 여러 개의 속성에 적용할 수도 있습니다.
css
.box {
width: 100px;
height: 100px;
background-color: blue;
transition: width 0.5s ease, height 0.5s ease, background-color 0.5s;
}
.box:hover {
width: 200px;
height: 200px;
background-color: red;
}
✅ 설명
- width, height, background-color가 각각 0.5초 동안 부드럽게 변경됨.
- 개별적으로 지속 시간과 이징 설정 가능.
3. CSS 애니메이션(Animation) 기본 사용법
1) @keyframes을 활용한 애니메이션
애니메이션을 만들기 위해서는 @keyframes을 사용해야 합니다.
css
@keyframes fadeIn {
from {
opacity: 0;
}
to {
opacity: 1;
}
}
.box {
width: 100px;
height: 100px;
background-color: blue;
animation: fadeIn 1s ease-in-out;
}
✅ 설명
- @keyframes fadeIn → 0%에서 100%까지 투명도를 변화시키는 애니메이션.
- .box 요소가 1초 동안 서서히 나타나는(fade in) 효과를 가짐.
2) infinite를 활용한 무한 반복 애니메이션
css
@keyframes bounce {
0%, 100% {
transform: translateY(0);
}
50% {
transform: translateY(-20px);
}
}
.bouncing-box {
width: 50px;
height: 50px;
background-color: red;
animation: bounce 1s infinite;
}
✅ 설명
- infinite → 애니메이션을 무한 반복하도록 설정.
- transform: translateY(-20px); → 요소를 위아래로 점프하는 효과.
4. 다양한 애니메이션 효과 구현하기
1) 페이드 인 & 페이드 아웃(Fade In & Out)
css
@keyframes fadeInOut {
0% { opacity: 0; }
50% { opacity: 1; }
100% { opacity: 0; }
}
.fade-box {
width: 100px;
height: 100px;
background-color: green;
animation: fadeInOut 2s infinite;
}
✅ 설명
- 요소가 서서히 나타났다 사라지는 페이드 인 & 아웃 효과 구현.
2) 로딩 스피너(Loading Spinner) 만들기
css
@keyframes spin {
0% { transform: rotate(0deg); }
100% { transform: rotate(360deg); }
}
.spinner {
width: 50px;
height: 50px;
border: 5px solid #ddd;
border-top: 5px solid blue;
border-radius: 50%;
animation: spin 1s linear infinite;
}
✅ 설명
- 요소를 회전시켜 로딩 애니메이션 효과 구현.
- border-radius: 50%로 원형으로 만든 후, border-top 색상만 다르게 설정.
5. JavaScript와 CSS 애니메이션 연동하기
1) JavaScript를 활용한 트리거 애니메이션
애니메이션을 특정 이벤트에서 실행할 수 있도록 JavaScript와 함께 사용할 수 있습니다.
html
<button id="animateBtn">애니메이션 시작</button>
<div id="animatedBox" class="box"></div>
css
.box {
width: 100px;
height: 100px;
background-color: blue;
transition: transform 0.5s ease-in-out;
}
.box.active {
transform: translateX(200px);
}
javascript
document.getElementById("animateBtn").addEventListener("click", function () {
document.getElementById("animatedBox").classList.toggle("active");
});
✅ 설명
- 버튼 클릭 시 active 클래스를 추가/제거하여 애니메이션을 실행.
6. CSS 애니메이션과 트랜지션 최적화 팁
✅ 1) will-change 속성을 활용해 성능 최적화
css
.box {
will-change: transform, opacity;
}
- GPU 가속을 활용해 부드러운 애니메이션 구현.
✅ 2) 너무 많은 애니메이션을 사용하지 않기
- 과도한 애니메이션은 성능 저하를 유발할 수 있음.
- 중요한 요소에만 애니메이션을 적용.
✅ 3) requestAnimationFrame() 활용 (JavaScript 애니메이션 최적화)
javascript
function smoothAnimation() {
requestAnimationFrame(smoothAnimation);
element.style.transform = `translateX(${x}px)`;
}
- setInterval보다 성능이 뛰어나 애니메이션을 부드럽게 렌더링.
결론
✅ 트랜지션(Transition) 활용 → 버튼, 메뉴 등 간단한 효과에 적합.
✅ 애니메이션(Animation) 활용 → 키프레임을 활용해 다단계 효과 구현.
✅ JavaScript와 연동 → 이벤트 기반 애니메이션 트리거 가능.
✅ 최적화 고려 → will-change, requestAnimationFrame() 활용.
이제 CSS 애니메이션과 트랜지션을 활용해 더욱 생동감 있는 웹사이트를 만들어보세요! 🚀✨
'웹퍼블리싱' 카테고리의 다른 글
HTML과 CSS로 이메일 템플릿 제작하기: 반응형 이메일 디자인 가이드 (0) | 2025.01.31 |
---|---|
웹사이트 SEO 최적화 가이드: 검색엔진 상위 노출을 위한 전략 (0) | 2025.01.30 |
SASS(SCSS)를 활용한 효율적인 CSS 관리 방법 (0) | 2025.01.29 |
웹사이트 로딩 속도를 높이는 이미지 최적화 전략 (0) | 2025.01.28 |
웹 접근성(A11Y) 최적화: 누구나 사용할 수 있는 웹사이트 만들기 (1) | 2025.01.26 |
다크 모드와 라이트 모드 구현: CSS와 JavaScript 활용법 (0) | 2025.01.25 |
웹사이트 보안을 강화하는 방법: HTTPS, CSP, CORS 완벽 가이드 (1) | 2025.01.24 |
웹사이트 성능 최적화를 위한 Lazy Loading 전략 (0) | 2025.01.23 |