본문 바로가기

웹퍼블리싱

CSS 애니메이션과 트랜지션을 활용한 생동감 있는 웹사이트 만들기

**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 애니메이션과 트랜지션을 활용해 더욱 생동감 있는 웹사이트를 만들어보세요! 🚀✨