티스토리 뷰

웹 디자인에서 '움직임'은 단순히 눈을 즐겁게 하는 요소가 아닙니다. 사용자의 시선을 유도하고, 인터랙션에 대한 피드백을 제공하며, 브랜드의 성격을 드러내는 중요한 도구입니다. 오늘은 CSS의 핵심 기능인 Transition과 Animation을 활용해 정적인 페이지에 생명력을 불어넣는 방법을 알아보겠습니다.
1. CSS Transition: 자연스러운 변화의 시작
transition은 요소의 상태가 변경될 때(예: 마우스 호버) 그 변화를 일정 시간에 걸쳐 부드럽게 보여주는 속성입니다.
핵심 속성
- transition-property: 변화를 적용할 속성 (예: background-color, transform)
- transition-duration: 변화가 일어날 시간 (예: 0.3s)
- transition-timing-function: 변화의 속도 곡선 (예: ease-in-out)
- transition-delay: 변화 시작 전 대기 시간
[실전 예제] 버튼 호버 인터랙션
마우스를 올렸을 때 크기가 커지며 색상이 부드럽게 변하는 버튼입니다.
.btn-modern {
padding: 12px 24px;
background-color: #3498db;
color: white;
border: none;
border-radius: 8px;
cursor: pointer;
font-size: 16px;
/* Transition 설정 */
transition: all 0.3s ease;
}
.btn-modern:hover {
background-color: #2980b9;
transform: translateY(-3px); /* 위로 살짝 이동 */
box-shadow: 0 5px 15px rgba(0,0,0,0.2); /* 그림자 추가 */
}
2. CSS Animation: 자유로운 움직임의 설계
transition이 두 상태 사이의 변화라면, @keyframes와 animation은 시작과 끝 사이에 여러 단계를 정의하여 복잡한 움직임을 만들 수 있습니다.
핵심 구조
- @keyframes: 애니메이션의 타임라인 정의 (0% ~ 100%)
- animation 속성: 정의된 키프레임을 요소에 적용 (이름, 지속시간, 반복 횟수 등)
[실전 예제 1] 로딩 스피너 (Loading Spinner)
무한히 회전하며 로딩 상태를 알리는 UI 요소입니다.
@keyframes rotate-spinner {
from { transform: rotate(0deg); }
to { transform: rotate(360deg); }
}
.spinner {
width: 40px;
height: 40px;
border: 4px solid rgba(0, 0, 0, 0.1);
border-left-color: #3498db;
border-radius: 50%;
/* Animation 적용 */
animation: rotate-spinner 1s linear infinite;
}
[실전 예제 2] 부드럽게 나타나는 카드 (Fade-in Up)
페이지가 로드될 때 아래에서 위로 올라오며 나타나는 효과입니다.
@keyframes fadeInUp {
0% {
opacity: 0;
transform: translateY(20px);
}
100% {
opacity: 1;
transform: translateY(0);
}
}
.card {
opacity: 0; /* 초기 상태 숨김 */
animation: fadeInUp 0.8s ease-out forwards;
animation-delay: 0.2s; /* 약간의 지연으로 리듬감 부여 */
}
3. Transition vs Animation: 언제 무엇을 쓸까?
구분TransitionAnimation
| 트리거 | :hover, :focus, JS 클래스 변경 등 | 페이지 로드 시 자동 실행 가능 |
| 복잡성 | 시작과 끝, 두 단계만 존재 | 여러 단계(Keyframes) 정의 가능 |
| 반복 | 반복 불가 | 무한 반복(infinite) 가능 |
| 적합한 곳 | 간단한 버튼 효과, 메뉴 열기 | 로딩 바, 배경 움직임, 복잡한 캐릭터 모션 |
4. 생동감을 더하는 팁
- 과유불급: 모든 요소가 움직이면 사용자는 피로를 느낍니다. 강조하고 싶은 포인트에만 적용하세요.
- 성능 최적화: width, height보다는 transform과 opacity 속성을 사용하는 것이 브라우저 렌더링 성능(GPU 가속)에 훨씬 유리합니다.
- 사용자 배려: 접근성을 위해 prefers-reduced-motion 미디어 쿼리를 사용하여 움직임을 원치 않는 사용자를 위한 옵션을 제공하는 것이 좋습니다.
@media (prefers-reduced-motion: reduce) {
* {
animation: none !important;
transition: none !important;
}
}
CSS 애니메이션은 정적인 코드를 사용자에게 살아있는 경험으로 전달하는 가교 역할을 합니다. 오늘 소개한 예제들을 바탕으로 여러분의 웹사이트에 기분 좋은 리듬감을 더해보세요.
반응형
'Frontend > CSS' 카테고리의 다른 글
| 티스토리 본문 가독성을 높이는 CSS 커스텀 팁 (H태그, 인용구) (0) | 2026.02.28 |
|---|---|
| CSS 가상 요소 ::before와 ::after로 디자인 디테일 살리기 (0) | 2026.02.28 |
| 이미지 중앙 정렬의 모든 것: 상황별 최적의 방법 5가지 (0) | 2026.02.28 |
| CSS 변수(Custom Properties) 완벽 가이드: 효율적인 웹 디자인과 유지보수를 위한 필수 기술 (0) | 2026.02.28 |
| 반응형 웹의 핵심, 미디어 쿼리(Media Query) 작성 가이드 (0) | 2026.02.28 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- AI
- on-device ai
- CSR
- react
- CSS
- 스마트안경
- LLM
- 웹기초
- prompt engineering
- 엣지컴퓨팅
- 멀티모달
- TypeScript
- java
- sLLM
- 협력
- HBM
- Javascript
- 구글
- SSR
- It용어
- 카카오
- Nextjs
- HTML
- MSA
- Rag
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | |||
| 5 | 6 | 7 | 8 | 9 | 10 | 11 |
| 12 | 13 | 14 | 15 | 16 | 17 | 18 |
| 19 | 20 | 21 | 22 | 23 | 24 | 25 |
| 26 | 27 | 28 | 29 | 30 |
글 보관함