์คํฌ๋กค ์งํ๋ฅ ์ ์ง์ ์ฐ๊ฒฐ๋ ๋์ ์ ๋๋ฉ์ด์ ์ ๊ฐ๋ฅํ๊ฒ ํ๋ ํ์ ์ ์ธ ์น ๊ธฐ์ , CSS ์คํฌ๋กค ํ์๋ผ์ธ์ ์์๋ณด์ธ์. ๊ตฌํ ๋ฐฉ๋ฒ, ์ด์ , ์ค์ ์ฌ์ฉ ์ฌ๋ก๋ฅผ ๋ฐฐ์๋ณด์ธ์.
CSS ์คํฌ๋กค ํ์๋ผ์ธ: ์คํฌ๋กค ๊ธฐ๋ฐ ํจ๊ณผ๋ก ์น ์ ๋๋ฉ์ด์ ์ ํ๋ช ์ ์ผ์ผํค๋ค
์น์ ๋์์์ด ์งํํ๊ณ ์์ผ๋ฉฐ, ๊ทธ์ ๋ฐ๋ผ ์ฌ์ฉ์์ ๊ธฐ๋์น๋ ๋์์ง๊ณ ์์ต๋๋ค. ์ ์ ์ธ ์นํ์ด์ง๋ ๊ณผ๊ฑฐ์ ์ ๋ฌผ์ ๋๋ค. ์ค๋๋ ์ฌ์ฉ์๋ค์ ์ํธ์์ฉ์ ์ด๊ณ ๋งค๋ ฅ์ ์ธ ๊ฒฝํ์ ์๊ตฌํฉ๋๋ค. ์น ์ ๋๋ฉ์ด์ ๋ถ์ผ์์ ๊ฐ์ฅ ํฅ๋ฏธ๋ก์ด ๋ฐ์ ์ค ํ๋๋ CSS ์คํฌ๋กค ํ์๋ผ์ธ์ผ๋ก, ์ฌ์ฉ์์ ์คํฌ๋กค ์งํ๋ฅ ์ ์ง์ ์ ์ผ๋ก ๊ตฌ๋๋๋ ๋์ ์ ๋๋ฉ์ด์ ์ ๋ง๋ค ์ ์๋ ๊ฐ๋ ฅํ ๊ธฐ๋ฅ์ ๋๋ค. ์ด๋ ๋ชฐ์ ๊ฐ ์๊ณ ์๊ฐ์ ์ผ๋ก ๋งค๋ ฅ์ ์ธ ์น์ฌ์ดํธ๋ฅผ ๋ง๋๋ ๋ฐ ๋ฌดํํ ๊ฐ๋ฅ์ฑ์ ์ด์ด์ค๋๋ค.
CSS ์คํฌ๋กค ํ์๋ผ์ธ์ด๋ ๋ฌด์์ธ๊ฐ?
CSS ์คํฌ๋กค ํ์๋ผ์ธ์ CSS์์ ์ ๋๋ฉ์ด์ ์ ์ ์ดํ๋ ์๋ก์ด ๋ฐฉ๋ฒ์ ๋์ ํ ์ฌ์์ ๋๋ค. ์๊ฐ ๊ธฐ๋ฐ ์ ๋๋ฉ์ด์ (์: ์ ํด์ง ์๊ฐ ๋์ ์ ๋๋ฉ์ด์ )์ ์์กดํ๋ ๋์ , ์คํฌ๋กค ํ์๋ผ์ธ์ ์ฌ์ฉํ๋ฉด ์ ๋๋ฉ์ด์ ์ ์งํ๋ฅ ์ ํน์ ์์๋ ์ ์ฒด ๋ฌธ์์ ์คํฌ๋กค ์์น์ ์ฐ๊ฒฐํ ์ ์์ต๋๋ค. ์ด๋ ์ฌ์ฉ์๊ฐ ํ์ด์ง๋ฅผ ์์๋๋ก ์คํฌ๋กคํ ๋ ์ ๋๋ฉ์ด์ ์ด ์งํ๋๊ฑฐ๋ ๋๊ฐ๊ธฐ๋์ด ์ฌ์ฉ์ ์ ๋ ฅ๊ณผ ์๊ฐ์ ์ถ๋ ฅ ์ฌ์ด์ ์ง์ ์ ์ด๊ณ ์ง๊ด์ ์ธ ์ฐ๊ฒฐ์ ๋ง๋ค์ด๋ ๋๋ค.
๋ณธ์ง์ ์ผ๋ก ์คํฌ๋กค ํ์๋ผ์ธ์ ์คํฌ๋กค๋ฐ๋ฅผ ์ ๋๋ฉ์ด์ ์ ์ปจํธ๋กค๋ฌ๋ก ๋ง๋ญ๋๋ค. ์์๊ฐ ํ๋ฉด์ ๋ค์ด์ฌ ๋ ์์ํ ๋ํ๋๊ณ , ์น์ ์ ์คํฌ๋กคํ ๋ ์งํ๋ฅ ํ์์ค์ด ์ฑ์์ง๊ฑฐ๋, ์ฌ์ฉ์๊ฐ ํ์ด์ง๋ฅผ ์๋๋ก ์ด๋ํจ์ ๋ฐ๋ผ ์ ์ฒด ์ฅ๋ฉด์ด ํผ์ณ์ง๋ ๊ฒ์ ์์ํด ๋ณด์ธ์. ๊ฐ๋ฅ์ฑ์ ๋ฌด๊ถ๋ฌด์งํ๋ฉฐ, ๊ทธ ๊ฒฐ๊ณผ๋ ๋ ํ๋ถํ๊ณ ๋งค๋ ฅ์ ์ธ ์ฌ์ฉ์ ๊ฒฝํ์ผ๋ก ์ด์ด์ง๋๋ค.
์ฃผ์ ๊ฐ๋ ๋ฐ ์ฉ์ด
๊ตฌํ์ ๋ค์ด๊ฐ๊ธฐ ์ ์ ๋ช ๊ฐ์ง ํ์ ์ฉ์ด๋ฅผ ์ ์ํด ๋ณด๊ฒ ์ต๋๋ค:
- ์คํฌ๋กค ํ์๋ผ์ธ(Scroll Timeline): ํต์ฌ ๊ฐ๋ ์ผ๋ก, ์ ๋๋ฉ์ด์ ์ ์งํ๋ฅ ์ ์คํฌ๋กค ์์น์ ์ฐ๊ฒฐํ๋ ๋ฉ์ปค๋์ฆ์ ๋๋ค.
- ์คํฌ๋กค ์งํ๋ฅ (Scroll Progress): ์ ์๋ ์คํฌ๋กค ๊ฐ๋ฅ ์์ญ ๋ด์์ ์คํฌ๋กค๋ฐ์ ํ์ฌ ์์น๋ฅผ ๋ํ๋ ๋๋ค. ์ผ๋ฐ์ ์ผ๋ก 0(์์ญ์ ์๋จ)๊ณผ 1(์์ญ์ ํ๋จ) ์ฌ์ด์ ๊ฐ์ ๋๋ค.
- ์ ๋๋ฉ์ด์ ํ์๋ผ์ธ(Animation Timeline): ์ ๋๋ฉ์ด์ ์ ์งํ๋ฅ ์ ์ ์ํ๋ ์ถ์์ ์ธ ํ์๋ผ์ธ์ ๋๋ค. CSS ์คํฌ๋กค ํ์๋ผ์ธ์ ์ฌ์ฉํ๋ฉด ๊ธฐ๋ณธ ์๊ฐ ๊ธฐ๋ฐ ์ ๋๋ฉ์ด์ ํ์๋ผ์ธ์ ์คํฌ๋กค ๊ธฐ๋ฐ ํ์๋ผ์ธ์ผ๋ก ๋์ฒดํ ์ ์์ต๋๋ค.
- `scroll-timeline-source`:** ์ด CSS ์์ฑ์ ์ ๋๋ฉ์ด์ ์ ๊ตฌ๋ํ ์คํฌ๋กค ์์น๋ฅผ ๊ฐ์ง ์์๋ฅผ ์ง์ ํฉ๋๋ค. `none`(๊ธฐ๋ณธ๊ฐ, ๊ธฐ๋ณธ ์๊ฐ ๊ธฐ๋ฐ ํ์๋ผ์ธ ์ฌ์ฉ), `auto`(๋ธ๋ผ์ฐ์ ๊ฐ ์ ์ ํ ์คํฌ๋กค๋ฌ ์ ํ), ๋๋ ID๋ฅผ ์ฌ์ฉํ์ฌ ํน์ ์์(์: `#my-scrolling-container`)๋ก ์ค์ ํ ์ ์์ต๋๋ค.
- `scroll-timeline-axis`:** ์ด ์์ฑ์ ์คํฌ๋กค ์งํ๋ฅ ์ ์ถ์ ํ ์ถ์ ์ ์ํฉ๋๋ค. `block`(์์ง ์คํฌ๋กค๋ง), `inline`(์ํ ์คํฌ๋กค๋ง), `both`(๋ ์ถ ๋ชจ๋)๋ก ์ค์ ํ ์ ์์ต๋๋ค.
- `animation-timeline`:** ์ด ์์ฑ์ ์ ๋๋ฉ์ด์ ์ ๋ช ๋ช ๋ ์คํฌ๋กค ํ์๋ผ์ธ๊ณผ ์ฐ๊ฒฐํฉ๋๋ค. ์ ๋๋ฉ์ด์ ์์ ์ฐธ์กฐํ๋ ค๋ฉด `scroll-timeline-name`๊ณผ ๊ฐ์ ์์ฑ์ ์ฌ์ฉํ๊ฑฐ๋ `animation-timeline: view()`๋ฅผ ์ฌ์ฉํ์ฌ ์คํฌ๋กค ํ์๋ผ์ธ์ ๋ง๋ค๊ณ ์ด๋ฆ์ ์ง์ ํด์ผ ํฉ๋๋ค.
- `view-timeline` (๋ทฐํฌํธ์ `scroll-timeline` ๋ฐ `scroll-timeline-axis`์ ๋ํ ๋จ์ถ ์์ฑ):** ๋ทฐํฌํธ์ ์คํฌ๋กค ์งํ๋ฅ ์ด ์ ๋๋ฉ์ด์ ํ์๋ผ์ธ์ผ๋ก ์ฌ์ฉ๋ ๋ ์ฌ์ฉ๋ฉ๋๋ค. `view()` ๋ฐ `view(inline)` ๋๋ `view(block)`์ ์ฌ์ฉํ์ฌ ์คํฌ๋กค ์ถ์ ์ง์ ํ ์ ์์ต๋๋ค. ๋ช ๋ช ๋ ํ์๋ผ์ธ์ ์ฌ์ฉํ ์๋ ์์ต๋๋ค.
CSS ์คํฌ๋กค ํ์๋ผ์ธ ๊ตฌํ: ๋จ๊ณ๋ณ ๊ฐ์ด๋
์์๊ฐ ๋ทฐ๋ก ์คํฌ๋กค๋ ๋ ๊ฐ๋จํ ํ์ด๋์ธ ์ ๋๋ฉ์ด์ ์ ๋ง๋๋ CSS ์คํฌ๋กค ํ์๋ผ์ธ ๊ตฌํ์ ์ค์ ์์ ๋ฅผ ์ดํด๋ณด๊ฒ ์ต๋๋ค.
์์ : ์คํฌ๋กค ์ ํ์ด๋์ธ
์ด ์์ ์์๋ ์์๊ฐ ๋ทฐํฌํธ๋ก ์คํฌ๋กค๋ ๋ ์์ํ ๋ํ๋๋๋ก ๋ง๋ญ๋๋ค. ์ด๋ ์ฝํ ์ธ ๋ฅผ ์ ์ง์ ์ผ๋ก ๋ณด์ฌ์ค์ผ๋ก์จ ์ฌ์ฉ์ ๊ฒฝํ์ ํฅ์์ํค๋ ์ผ๋ฐ์ ์ธ ํจ๊ณผ์ ๋๋ค.
HTML:
Fade In Element
This element will fade in as you scroll down the page.
CSS:
.scroll-item {
opacity: 0; /* Initially hidden */
animation: fade-in 1s linear forwards;
animation-timeline: view(); /* Uses the viewport scroll as the timeline */
animation-range: entry 25% cover 75%;
}
@keyframes fade-in {
from { opacity: 0; }
to { opacity: 1; }
}
.container {
height: 200vh; /* Make the container taller than the viewport for scrolling */
}
์ค๋ช :
- `opacity: 0;`:** ์ฒ์์ `scroll-item`์ ๋ถํฌ๋ช ๋๋ฅผ 0์ผ๋ก ์ค์ ํ์ฌ ์จ๊น๋๋ค.
- `animation: fade-in 1s linear forwards;`:** `fade-in`์ด๋ผ๋ ํ์ค CSS ์ ๋๋ฉ์ด์ ์ ์ ์ํฉ๋๋ค. 1์ด ๋์ ์๋ฃ๋๊ณ , ์ ํ ํ์ด๋ฐ ํจ์๋ฅผ ๊ฐ์ง๋ฉฐ, ์ต์ข ์ํ๋ฅผ ์ ์งํฉ๋๋ค(`forwards`).
- `animation-timeline: view();`:** ์ด ๋ถ๋ถ์ด ํต์ฌ์ ๋๋ค. ๋ธ๋ผ์ฐ์ ์๊ฒ ๋ทฐํฌํธ์ ์คํฌ๋กค ์งํ๋ฅ ์ ์ ๋๋ฉ์ด์ ํ์๋ผ์ธ์ผ๋ก ์ฌ์ฉํ๋๋ก ์ง์ํฉ๋๋ค. ์ด๋ "fade-in" ์ ๋๋ฉ์ด์ ์ ํ์ค ์๊ณ ๋์ ์คํฌ๋กค๋ฐ์ ๋ฐ์ธ๋ฉํฉ๋๋ค. ์์๊ฐ ๋ธ๋ผ์ฐ์ ๋ทฐํฌํธ์ ๋ํ๋ ๋ ์ ๋๋ฉ์ด์ ์ ์ ์ฉํฉ๋๋ค.
- `animation-range: entry 25% cover 75%;`:** ์ด ์ค์ ์ ๋๋ฉ์ด์ ์ด ์ ์ฉ๋์ด์ผ ํ ๋ทฐํฌํธ ๋ด ์์์ ๊ฐ์์ฑ ๋ฒ์๋ฅผ ์ง์ ํฉ๋๋ค. `entry 25%`๋ ์์์ ์๋จ์ด ๋ทฐํฌํธ ๋์ด์ 25% ์ง์ ์์ ๋ทฐํฌํธ๋ก ๋ค์ด์ฌ ๋ ์ ๋๋ฉ์ด์ ์ด ์์๋จ์ ์๋ฏธํฉ๋๋ค. `cover 75%`๋ ์์์ ํ๋จ์ด ๋ทฐํฌํธ ๋์ด์ 75%๋ฅผ ๋ฎ์ ๋ ์ ๋๋ฉ์ด์ ์ด ์๋ฃ๋จ์ ์๋ฏธํฉ๋๋ค. ์ด๋ฅผ ํตํด ์์์ ๊ฐ์์ฑ์ ๊ธฐ์ค์ผ๋ก ์ ๋๋ฉ์ด์ ์ด ์ธ์ ์์ํ๊ณ ๋๋ ์ง ์ ์ดํ ์ ์์ต๋๋ค.
- `@keyframes fade-in`:** ๋ถํฌ๋ช ๋๋ฅผ 0์์ 1๋ก ์ ํํ๋ ์ค์ ์ ๋๋ฉ์ด์ ์ ์ ์ํฉ๋๋ค.
- `.container { height: 200vh; }`:** ํ์ด์ง๋ฅผ ์คํฌ๋กค ๊ฐ๋ฅํ๊ฒ ๋ง๋ค์ด ์ ๋๋ฉ์ด์ ์ด ํธ๋ฆฌ๊ฑฐ๋ ์ ์๋๋ก ํฉ๋๋ค.
์์ : ๋ช ๋ช ๋ ์คํฌ๋กค ํ์๋ผ์ธ ์ฌ์ฉ
๋๋ก๋ ์ฌ๋ฌ ์์์์ ์ฌ์ฉํ ๋ช ๋ช ๋ ์คํฌ๋กค ํ์๋ผ์ธ์ ๋ง๋ค๊ฑฐ๋ ์ ์ฒด ๋ทฐํฌํธ๊ฐ ์๋ ํน์ ์ปจํ ์ด๋ ๋ด์ ์คํฌ๋กค์ ์ถ์ ํ๊ณ ์ถ์ ์ ์์ต๋๋ค.
HTML:
Item 1
Item 2
Item 3
CSS:
.scroll-container {
width: 300px;
height: 200px;
overflow-y: scroll; /* Enable vertical scrolling */
scroll-timeline-name: myVerticalScroll;
scroll-timeline-axis: block; /* Vertical scroll */
}
.scroll-item {
height: 100px;
margin-bottom: 20px;
background-color: #f0f0f0;
display: flex;
align-items: center;
justify-content: center;
font-size: 16px;
}
.item1 {
animation: slide-in 0.5s linear forwards;
animation-timeline: myVerticalScroll;
}
.item2 {
animation: slide-in 0.5s linear forwards;
animation-timeline: myVerticalScroll;
animation-delay: 0.2s; /* Stagger the animation */
}
.item3 {
animation: slide-in 0.5s linear forwards;
animation-timeline: myVerticalScroll;
animation-delay: 0.4s; /* Stagger the animation */
}
@keyframes slide-in {
from { transform: translateX(-100%); opacity: 0; }
to { transform: translateX(0); opacity: 1; }
}
์ค๋ช :
- `.scroll-container`:** ์ด ์์๋ `overflow-y: scroll;`์ ์ฌ์ฉํ์ฌ ์คํฌ๋กค ์ปจํ ์ด๋๋ก ์ค์ ๋ฉ๋๋ค.
- `scroll-timeline-name: myVerticalScroll;`:** `myVerticalScroll`์ด๋ผ๋ ๋ช ๋ช ๋ ์คํฌ๋กค ํ์๋ผ์ธ์ ๋ง๋ญ๋๋ค.
- `scroll-timeline-axis: block;`:** ํ์๋ผ์ธ์ด ์์ง ์คํฌ๋กค ์์น๋ฅผ ์ถ์ ํ๋๋ก ์ง์ ํฉ๋๋ค.
- `.scroll-item`:** ๊ฐ ํญ๋ชฉ์ `animation-timeline: myVerticalScroll;`์ ์ฌ์ฉํ์ฌ ์ ๋๋ฉ์ด์ ์ ๋ช ๋ช ๋ ์คํฌ๋กค ํ์๋ผ์ธ์ ์ฐ๊ฒฐํฉ๋๋ค.
- ์์ฐจ๋ฅผ ๋ ์ ๋๋ฉ์ด์ (Staggered Animations):** `animation-delay`๋ฅผ ์ฌ์ฉํ์ฌ ์์ฐจ ํจ๊ณผ๋ฅผ ๋ง๋ค์ด ์ฌ์ฉ์๊ฐ ์คํฌ๋กคํ ๋ ๊ฐ ํญ๋ชฉ์ด ์์ฐจ์ ์ผ๋ก ์ ๋๋ฉ์ด์ ๋๋๋ก ํฉ๋๋ค.
- `@keyframes slide-in`:** ์์๋ฅผ ์ผ์ชฝ์์ ์ฌ๋ผ์ด๋ ์ธํ๋ ์ ๋๋ฉ์ด์ ์ ์ ์ํฉ๋๋ค.
๊ณ ๊ธ ๊ธฐ์ ๋ฐ ์ฌ์ฉ ์ฌ๋ก
CSS ์คํฌ๋กค ํ์๋ผ์ธ์ ๋จ์ํ ํ์ด๋์ธ ํจ๊ณผ์๋ง ๊ตญํ๋์ง ์์ต๋๋ค. ๋ค์ํ ์ ๊ตํ ์ ๋๋ฉ์ด์ ๊ณผ ์ํธ์์ฉ ๊ฒฝํ์ ๋ง๋๋ ๋ฐ ์ฌ์ฉํ ์ ์์ต๋๋ค. ๋ค์์ ๋ช ๊ฐ์ง ๊ณ ๊ธ ๊ธฐ์ ๋ฐ ์ฌ์ฉ ์ฌ๋ก์ ๋๋ค:
1. ํจ๋ด๋์ค ์คํฌ๋กค๋ง
ํจ๋ด๋์ค ์คํฌ๋กค๋ง์ ์ฌ์ฉ์๊ฐ ์คํฌ๋กคํ ๋ ์นํ์ด์ง์ ๋ค๋ฅธ ๋ ์ด์ด๋ฅผ ๋ค๋ฅธ ์๋๋ก ์์ง์ฌ ๊น์ด๊ฐ๊ณผ ๋ชฐ์ ๊ฐ์ ๋ง๋๋ ๊ฒ์ ํฌํจํฉ๋๋ค. ์คํฌ๋กค ํ์๋ผ์ธ์ ์ฌ์ฉํ๋ฉด ์๋ฐ์คํฌ๋ฆฝํธ์ ํฌ๊ฒ ์์กดํ์ง ์๊ณ ๋ ํจ๋ด๋์ค ํจ๊ณผ๋ฅผ ํจ์ฌ ์ฝ๊ฒ ๊ตฌํํ ์ ์์ต๋๋ค.
๊ฐ๋ : ๋ค๋ฅธ ์์๋ค์ ์คํฌ๋กค ์งํ๋ฅ ์ ๋ฐ๋ผ ๋ค๋ฅธ ์ ๋๋ฉ์ด์ ๋ฒ์์ ๋ณํ์ ๊ฐ์ง๋๋ค.
์์: ๋ฐฐ๊ฒฝ ์ด๋ฏธ์ง๊ฐ ์ ๊ฒฝ ์ฝํ ์ธ ๋ณด๋ค ๋๋ฆฌ๊ฒ ์์ง์ฌ ํจ๋ด๋์ค ํจ๊ณผ๋ฅผ ๋ง๋ญ๋๋ค.
2. ๋์ ๋์์ ๊ฐ์ง ๊ณ ์ ์์(Sticky Elements)
๊ณ ์ ์์น ์ง์ (sticky positioning)๊ณผ ์คํฌ๋กค ํ์๋ผ์ธ์ ๊ฒฐํฉํ์ฌ ๋ทฐํฌํธ ์๋จ์ ๊ณ ์ ๋๋ฉด์ ์คํฌ๋กค ์งํ๋ฅ ์ ๋ฐ๋ผ ์ ๋๋ฉ์ด์ ๋๋ ์์๋ฅผ ๋ง๋ค ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, ์ฌ์ฉ์๊ฐ ์๋๋ก ์คํฌ๋กคํ ๋ ๋ด๋น๊ฒ์ด์ ๋ฐ๊ฐ ์ถ์๋๊ฑฐ๋ ๋ชจ์์ด ๋ณ๊ฒฝ๋ ์ ์์ต๋๋ค.
๊ฐ๋ : `position: sticky`๋ฅผ ์คํฌ๋กค ๊ธฐ๋ฐ ์ ๋๋ฉ์ด์ ๊ณผ ํจ๊ป ์ฌ์ฉํ์ฌ ์ฌ์ฉ์๊ฐ ์คํฌ๋กคํ ๋ ์์ ์์ฑ์ ์์ ํฉ๋๋ค.
3. ์งํ๋ฅ ํ์๊ธฐ
์ฌ์ฉ์๊ฐ ํ์ด์ง๋ ์น์ ์ ์ผ๋ง๋ ์คํฌ๋กคํ๋์ง ๋ณด์ฌ์ฃผ๋ ์งํ๋ฅ ํ์์ค์ด๋ ๋ค๋ฅธ ์๊ฐ์ ํ์๊ธฐ๋ฅผ ๋ง๋ญ๋๋ค. ์ด๋ ๊ท์คํ ํผ๋๋ฐฑ์ ์ ๊ณตํ๊ณ ์ฌ์ฉ์๊ฐ ์ฝํ ์ธ ๋ด์์ ์์ ์ ์์น๋ฅผ ์ดํดํ๋ ๋ฐ ๋์์ด ๋ฉ๋๋ค.
๊ฐ๋ : ์ ๋๋ฉ์ด์ ์ `width` ๋๋ `height`๊ฐ ์คํฌ๋กค ์งํ๋ฅ ์ ๋ฐ๋ผ ๊ตฌ๋๋์ด ๋ณธ ์ฝํ ์ธ ์ ์์ ์๊ฐ์ ์ผ๋ก ๋ํ๋ ๋๋ค.
4. ๋ณต์กํ ์ฅ๋ฉด ์ ํ
์คํฌ๋กค ์์น์ ๋ฐ๋ผ ์นํ์ด์ง์ ์ ์ฒด ์ฅ๋ฉด์ด๋ ์น์ ์ ์ ๋๋ฉ์ด์ ํฉ๋๋ค. ์ด๋ ์ฌ์ฉ์์ ์คํฌ๋กค์ด ์ค๊ฑฐ๋ฆฌ๋ฅผ ์ ๊ฐํ๋ ์ํธ์์ฉ์ ์ธ ์ด์ผ๊ธฐ๋ ์์ฌ๋ฅผ ๋ง๋๋ ๋ฐ ์ฌ์ฉ๋ ์ ์์ต๋๋ค.
๊ฐ๋ : ์ฌ๋ฌ ์์๊ฐ ์กฐ์ ๋ ์์๋ก ์ ๋๋ฉ์ด์ ๋์ด ๋ณต์กํ๊ณ ๋งค๋ ฅ์ ์ธ ์๊ฐ์ ์คํ ๋ฆฌ๋ฅผ ๋ง๋ญ๋๋ค.
5. ์ ๋๋ฉ์ด์ ์ฐจํธ ๋ฐ ๋ฐ์ดํฐ ์๊ฐํ
์คํฌ๋กค ์งํ๋ฅ ์ ๋ฐ๋ผ ์ฐจํธ์ ๋ฐ์ดํฐ ์๊ฐํ๋ฅผ ์ ๋๋ฉ์ด์ ํ์ฌ ์๋๊ฐ์ ๋ถ์ด๋ฃ์ต๋๋ค. ์ด๋ ๋ณต์กํ ๋ฐ์ดํฐ๋ฅผ ๋ ๋งค๋ ฅ์ ์ด๊ณ ์ดํดํ๊ธฐ ์ฝ๊ฒ ๋ง๋ค ์ ์์ต๋๋ค.
๊ฐ๋ : ์ฌ์ฉ์๊ฐ ๋ฐ์ดํฐ ์น์ ์ ์คํฌ๋กคํ ๋ ๋ฐ์ดํฐ ํฌ์ธํธ๋ ์ฐจํธ ์์๊ฐ ๋ทฐ์ ์ ๋๋ฉ์ด์ ๋๊ฑฐ๋ ๋ชจ์์ด ๋ณ๊ฒฝ๋ฉ๋๋ค.
CSS ์คํฌ๋กค ํ์๋ผ์ธ ์ฌ์ฉ์ ์ด์
์น ๊ฐ๋ฐ ํ๋ก์ ํธ์์ CSS ์คํฌ๋กค ํ์๋ผ์ธ์ ์ฑํํด์ผ ํ๋ ๋ช ๊ฐ์ง ๊ฐ๋ ฅํ ์ด์ ๊ฐ ์์ต๋๋ค:
- ์ฑ๋ฅ ํฅ์: ์คํฌ๋กค ํ์๋ผ์ธ ์ ๋๋ฉ์ด์ ์ ๋ธ๋ผ์ฐ์ ์ ๋ ๋๋ง ์์ง์์ ์ง์ ์ฒ๋ฆฌ๋๊ธฐ ๋๋ฌธ์ ์ผ๋ฐ์ ์ผ๋ก ์๋ฐ์คํฌ๋ฆฝํธ ๊ธฐ๋ฐ ์ ๋๋ฉ์ด์ ๋ณด๋ค ์ฑ๋ฅ์ด ๋ฐ์ด๋ฉ๋๋ค. ์ด๋ ๋ ๋ถ๋๋ฌ์ด ์คํฌ๋กค๋ง๊ณผ ๋ ๋์ ์ ๋ฐ์ ์ธ ์ฌ์ฉ์ ๊ฒฝํ์ผ๋ก ์ด์ด์ง ์ ์์ต๋๋ค.
- ์๋ฐ์คํฌ๋ฆฝํธ ์์กด์ฑ ๊ฐ์: CSS ์คํฌ๋กค ํ์๋ผ์ธ์ ์ฌ์ฉํ๋ฉด ์ ๋๋ฉ์ด์ ์ ๋ํ ์๋ฐ์คํฌ๋ฆฝํธ ์์กด์ฑ์ ํฌ๊ฒ ์ค์ฌ ์ฝ๋๋ฅผ ๋ ๊นจ๋ํ๊ณ ์ ์ง๋ณด์ํ๊ธฐ ์ฌ์ฐ๋ฉฐ ์ค๋ฅ ๋ฐ์ ๊ฐ๋ฅ์ฑ์ ๋ฎ์ถ ์ ์์ต๋๋ค.
- ์ ์ธ์ ๊ตฌ๋ฌธ: CSS๋ ์ ๋๋ฉ์ด์ ์ ์ ์ํ๋ ์ ์ธ์ ์ธ ๋ฐฉ๋ฒ์ ์ ๊ณตํ์ฌ ์ ๋๋ฉ์ด์ ๋ก์ง์ ๋ ์ฝ๊ฒ ์ดํดํ๊ณ ์์ ํ ์ ์์ต๋๋ค.
- ์ ๊ทผ์ฑ: ์ฌ๋ฐ๋ฅด๊ฒ ๊ตฌํ๋ CSS ์ ๋๋ฉ์ด์ ์ ๋ณด์กฐ ๊ธฐ์ ์ ๋ฐฉํดํ ๊ฐ๋ฅ์ฑ์ด ์ ๊ธฐ ๋๋ฌธ์ ์๋ฐ์คํฌ๋ฆฝํธ ๊ธฐ๋ฐ ์ ๋๋ฉ์ด์ ๋ณด๋ค ๋ ์ ๊ทผ์ฑ์ด ๋์ ์ ์์ต๋๋ค.
- ์ฌ์ฉ์ ๊ฒฝํ ํฅ์: ์คํฌ๋กค ๊ธฐ๋ฐ ์ ๋๋ฉ์ด์ ์ ๋ ๋งค๋ ฅ์ ์ด๊ณ ์ํธ์์ฉ์ ์ธ ์ฌ์ฉ์ ๊ฒฝํ์ ๋ง๋ค์ด ์ฌ์ฉ์ ๋ง์กฑ๋๋ฅผ ๋์ด๊ณ ์น์ฌ์ดํธ์ ๋ ์ค๋ ๋จธ๋ฌด๋ฅด๊ฒ ํ ์ ์์ต๋๋ค.
๊ณ ๋ ค์ฌํญ ๋ฐ ๋ชจ๋ฒ ์ฌ๋ก
CSS ์คํฌ๋กค ํ์๋ผ์ธ์ ๋ง์ ์ด์ ์ ์ ๊ณตํ์ง๋ง, ๋ช ์ฌํด์ผ ํ ๋ช ๊ฐ์ง ๊ณ ๋ ค์ฌํญ๊ณผ ๋ชจ๋ฒ ์ฌ๋ก๋ ์์ต๋๋ค:
- ๋ธ๋ผ์ฐ์ ํธํ์ฑ: ๋น๊ต์ ์๋ก์ด ๊ธฐ์ ์ด๋ฏ๋ก CSS ์คํฌ๋กค ํ์๋ผ์ธ์ ๋ชจ๋ ๋ธ๋ผ์ฐ์ , ํนํ ๊ตฌํ ๋ฒ์ ์์ ์๋ฒฝํ๊ฒ ์ง์๋์ง ์์ ์ ์์ต๋๋ค. CanIUse.com๊ณผ ๊ฐ์ ์ฌ์ดํธ์์ ํ์ฌ ์ง์ ํํฉ์ ํ์ธํ๊ณ , ๊ตฌํ ๋ธ๋ผ์ฐ์ ๋ฅผ ์ํด ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ์ฌ์ฉํ ๋์ฒด ๊ธฐ๋ฅ์ ์ ๊ณตํ์ธ์.
- ์ฑ๋ฅ ์ต์ ํ: ์ผ๋ฐ์ ์ผ๋ก ์๋ฐ์คํฌ๋ฆฝํธ ์ ๋๋ฉ์ด์ ๋ณด๋ค ์ฑ๋ฅ์ด ์ฐ์ํ์ง๋ง, ์ ๋๋ก ์ต์ ํ๋์ง ์์ ์คํฌ๋กค ํ์๋ผ์ธ ์ ๋๋ฉ์ด์ ์ ์ฌ์ ํ ์ฑ๋ฅ์ ์ํฅ์ ๋ฏธ์น ์ ์์ต๋๋ค. ๋ ์ด์์์ ์ ๋ฐํ๋ ์์ฑ(์: `width`, `height`)์ ์ ๋๋ฉ์ด์ ์ ํผํ๊ณ ๋์ `transform`๊ณผ `opacity`๋ฅผ ์ฌ์ฉํ๋ ๋ฑ์ ๊ธฐ์ ์ ์ฌ์ฉํ์ธ์.
- ์ ๊ทผ์ฑ: ์ฅ์ ๊ฐ ์๋ ์ฌ์ฉ์๋ฅผ ํฌํจํ ๋ชจ๋ ์ฌ์ฉ์๊ฐ ์คํฌ๋กค ํ์๋ผ์ธ ์ ๋๋ฉ์ด์ ์ ์ ๊ทผํ ์ ์๋๋ก ํ์ธ์. ๋๋ฌด ์ฐ๋งํ๊ฑฐ๋ ์ฌ์ฉ์์ ํ์ด์ง ํ์ ๋ฅ๋ ฅ์ ๋ฐฉํดํ๋ ์ ๋๋ฉ์ด์ ์ ๋ง๋ค์ง ๋ง์ธ์. ์ ๋๋ฉ์ด์ ์ ๋ณด๊ณ ์ถ์ดํ์ง ์๋ ์ฌ์ฉ์๋ฅผ ์ํ ๋์์ ์ ๊ณตํ์ธ์. `prefers-reduced-motion` ๋ฏธ๋์ด ์ฟผ๋ฆฌ๋ฅผ ์ฌ์ฉํ์ฌ ์ ๋๋ฉ์ด์ ์ ๋นํ์ฑํํ์ธ์.
- ์ ์ง์ ํฅ์: CSS ์คํฌ๋กค ํ์๋ผ์ธ์ ์ ์ง์ ํฅ์์ผ๋ก ์ฌ์ฉํ์ธ์. ์ด๋ ๋ธ๋ผ์ฐ์ ๊ฐ ์คํฌ๋กค ํ์๋ผ์ธ์ ์ง์ํ์ง ์๋๋ผ๋ ์น์ฌ์ดํธ์ ํต์ฌ ๊ธฐ๋ฅ์ ์ฌ์ ํ ์๋ํด์ผ ํจ์ ์๋ฏธํฉ๋๋ค.
- ๊ณผ๋ํ ์ ๋๋ฉ์ด์ : ์ ๋๋ฉ์ด์ ์ ๋จ์ฉํ์ง ๋ง์ธ์. ๋ฏธ๋ฌํ๊ณ ๋ชฉ์ ์๋ ์ ๋๋ฉ์ด์ ์ด ๋ถํ์ํ ์ ๋๋ฉ์ด์ ๋ณด๋ค ํจ์ฌ ํจ๊ณผ์ ์ ๋๋ค. ์ ๋๋ฉ์ด์ ์ด UX๋ฅผ ๋ฐฉํดํ์ง ์๊ณ ํฅ์์ํค๋๋ก ํ์ธ์.
์ค์ ์ฌ์ฉ ์ฌ๋ก
๋ค์์ CSS ์คํฌ๋กค ํ์๋ผ์ธ์ ์ฌ์ฉํ์ฌ ์ฌ์ฉ์ ๊ฒฝํ์ ํฅ์์ํฌ ์ ์๋ ์ค์ ์ฌ๋ก์ ๋๋ค:
- ์ ์์๊ฑฐ๋ ์ ํ ํ์ด์ง: ์ฌ์ฉ์๊ฐ ํ์ด์ง๋ฅผ ์๋๋ก ์คํฌ๋กคํ ๋ ์ ํ ๊ธฐ๋ฅ์ ๊ฐ์กฐํ๊ฑฐ๋ ์ ํ์ ๋ค๋ฅธ ๋ทฐ๋ฅผ ๋ณด์ฌ์ฃผ๊ธฐ ์ํด ์คํฌ๋กค ๊ธฐ๋ฐ ์ ๋๋ฉ์ด์ ์ ์ฌ์ฉํฉ๋๋ค.
- ํฌํธํด๋ฆฌ์ค ์น์ฌ์ดํธ: ์ฌ์ฉ์์ ์คํฌ๋กค์ด ๋ค๋ฅธ ํ๋ก์ ํธ๋ ์ฑ๊ณผ๋ฅผ ๋ณด์ฌ์ฃผ๋ ์ํธ์์ฉ์ ์ธ ํฌํธํด๋ฆฌ์ค ์น์ฌ์ดํธ๋ฅผ ๋ง๋ญ๋๋ค.
- ๋ด์ค ๊ธฐ์ฌ: ์ฌ์ฉ์๊ฐ ๋ด์ค ๊ธฐ์ฌ๋ฅผ ์คํฌ๋กคํ ๋ ์ฐจํธ, ๊ทธ๋ํ ๋๋ ์ด๋ฏธ์ง๋ฅผ ์ ๋๋ฉ์ด์ ํ์ฌ ์ฝํ ์ธ ๋ฅผ ๋ ๋งค๋ ฅ์ ์ด๊ณ ์ดํดํ๊ธฐ ์ฝ๊ฒ ๋ง๋ญ๋๋ค.
- ๋๋ฉ ํ์ด์ง: ์คํฌ๋กค ๊ธฐ๋ฐ ์ ๋๋ฉ์ด์ ์ ์ฌ์ฉํ์ฌ ์ฌ์ฉ์๋ฅผ ๋๋ฉ ํ์ด์ง ์๋๋ก ์๋ดํ๊ณ ์ฃผ์ ๊ธฐ๋ฅ๊ณผ ํด๋ฆญ ์ ๋ ๋ฌธ์์ ๊ฐ์กฐํฉ๋๋ค.
๊ธ๋ก๋ฒ ๊ณ ๋ ค์ฌํญ:
๊ธ๋ก๋ฒ ์ฌ์ฉ์๋ฅผ ๋์์ผ๋ก ์คํฌ๋กค ๊ธฐ๋ฐ ์ ๋๋ฉ์ด์ ์ ๋์์ธํ ๋๋ ์คํฌ๋กค ํ๋์ ๋ฌธํ์ ์ฐจ์ด๋ฅผ ๊ณ ๋ คํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค. ์๋ฅผ ๋ค์ด, ์ผ๋ถ ๋ฌธํ๊ถ์ ์ฌ์ฉ์๋ ์์ง ์คํฌ๋กค์ ๋ ์ต์ํ ์ ์์ง๋ง, ๋ค๋ฅธ ๋ฌธํ๊ถ์ ์ฌ์ฉ์๋ ์ํ ์คํฌ๋กค์ ๋ ํธํ๊ฒ ๋๋ ์ ์์ต๋๋ค. ์คํฌ๋กค์ ์ฌ์ฉํ๊ณ ์ถ์ดํ์ง ์๋ ์ฌ์ฉ์๋ฅผ ์ํด ๋์ฒด ํ์ ์ต์ ์ ์ ๊ณตํ๋ ๊ฒ์ ๊ณ ๋ คํ์ธ์.
๋ํ, ์ธํฐ๋ท ์ฐ๊ฒฐ์ด ๋๋ฆฐ ์ฅ์น์์์ ์ ์ฌ์ ์ธ ์ฑ๋ฅ ๋ฌธ์ ์ ์ ์ํ์ธ์. ์ ๋๋ฉ์ด์ ์ด ๋น ๋ฅด๊ฒ ๋ก๋๋๊ณ ์ฌ์ฉ์ ๊ฒฝํ์ ๋ถ์ ์ ์ธ ์ํฅ์ ๋ฏธ์น์ง ์๋๋ก ์ต์ ํํ์ธ์. ์๋ฅผ ๋ค์ด, ์ด๋ฏธ์ง๋ฅผ ํจ๊ณผ์ ์ผ๋ก ์์ถํ๊ณ ์ ์ ํ ๋ฏธ๋์ด ์ฟผ๋ฆฌ๋ฅผ ์ฌ์ฉํ์ธ์.
๋์ฒด ์ ๊ทผ๋ฒ
CSS ์คํฌ๋กค ํ์๋ผ์ธ์ ์คํฌ๋กค ๊ธฐ๋ฐ ์ ๋๋ฉ์ด์ ์ ๋ง๋๋ ๊ฐ๋ ฅํ๊ณ ์ฑ๋ฅ์ด ์ฐ์ํ ๋ฐฉ๋ฒ์ ์ ๊ณตํ์ง๋ง, ๋ค์๊ณผ ๊ฐ์ ๋์ฒด ์ ๊ทผ๋ฒ๋ ๊ณ ๋ คํ ์ ์์ต๋๋ค:
- ์๋ฐ์คํฌ๋ฆฝํธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ (์: ScrollMagic, GreenSock): ์๋ฐ์คํฌ๋ฆฝํธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ๋ ์ฑ์ํ๊ณ ๋๋ฆฌ ์ง์๋๋ ๋์์ ์ ๊ณตํ์ง๋ง, ์ผ๋ฐ์ ์ผ๋ก CSS ์คํฌ๋กค ํ์๋ผ์ธ์ ๋นํด ์ฑ๋ฅ ์ค๋ฒํค๋๊ฐ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ๋ ๋์ ๋ธ๋ผ์ฐ์ ์ง์๊ณผ ๋ ์ฝ๊ฒ ์ง์์ ๋ฐ์ ์ ์๋ ๋ ํฐ ์ปค๋ฎค๋ํฐ๋ฅผ ๊ฐ์ง๊ณ ์์ต๋๋ค.
- Intersection Observer API: Intersection Observer API๋ฅผ ์ฌ์ฉํ๋ฉด ์์๊ฐ ๋ทฐํฌํธ์ ๋ค์ด์ค๊ฑฐ๋ ๋๊ฐ ๋๋ฅผ ๊ฐ์งํ ์ ์์ผ๋ฉฐ, ์ด๋ฅผ ์ฌ์ฉํ์ฌ ์ ๋๋ฉ์ด์ ์ด๋ ๋ค๋ฅธ ์์ ์ ํธ๋ฆฌ๊ฑฐํ ์ ์์ต๋๋ค. ๊ฐ๋จํ ์คํฌ๋กค ํธ๋ฆฌ๊ฑฐ ํจ๊ณผ์๋ ์ข์ ์ต์ ์ด์ง๋ง, ๋ณต์กํ ์ ๋๋ฉ์ด์ ์๋ CSS ์คํฌ๋กค ํ์๋ผ์ธ๋งํผ ๊ฐ๋ ฅํ๊ฑฐ๋ ์ ์ฐํ์ง ์์ต๋๋ค.
์ ๊ทผ๋ฒ์ ์ ํ์ ํ๋ก์ ํธ์ ํน์ ์๊ตฌ ์ฌํญ, ์ํ๋ ๋ธ๋ผ์ฐ์ ํธํ์ฑ ์์ค ๋ฐ ์ฑ๋ฅ ๊ณ ๋ ค ์ฌํญ์ ๋ฐ๋ผ ๋ฌ๋ผ์ง๋๋ค.
๊ฒฐ๋ก
CSS ์คํฌ๋กค ํ์๋ผ์ธ์ ์น ๊ฐ๋ฐ์๊ฐ ๋์ ์ด๊ณ ๋งค๋ ฅ์ ์ด๋ฉฐ ์ฑ๋ฅ์ด ๋ฐ์ด๋ ์คํฌ๋กค ๊ธฐ๋ฐ ์ ๋๋ฉ์ด์ ์ ๋ง๋ค ์ ์๋๋ก ํ๋ ํ๊ธฐ์ ์ธ ๊ธฐ์ ์ ๋๋ค. ์ ๋๋ฉ์ด์ ์ ์ฌ์ฉ์์ ์คํฌ๋กค ์งํ๋ฅ ์ ์ง์ ์ฐ๊ฒฐํจ์ผ๋ก์จ ๋ ์ง๊ด์ ์ด๊ณ ๋ชฐ์ ๊ฐ ์๋ ์ฌ์ฉ์ ๊ฒฝํ์ ๋ง๋ค ์ ์์ต๋๋ค. ์์ง ๋น๊ต์ ์๋ก์ด ๊ธฐ์ ์ด์ง๋ง, CSS ์คํฌ๋กค ํ์๋ผ์ธ์ ์น ์ ๋๋ฉ์ด์ ์ ํ๋ช ์ ์ผ์ผํค๊ณ ์น์์์ ์๋ก์ด ์ฐจ์์ ์ํธ์์ฉ์ฑ์ ์ด์ด์ค ์ ์ฌ๋ ฅ์ ๊ฐ์ง๊ณ ์์ต๋๋ค.
์ด ๊ธฐ์ ์ ๋ฐ์๋ค์ด๊ณ , ๋ค์ํ ํจ๊ณผ๋ฅผ ์คํํ๋ฉฐ, ์น ์ ๋๋ฉ์ด์ ์ผ๋ก ๊ฐ๋ฅํ ๊ฒ์ ๊ฒฝ๊ณ๋ฅผ ๋ํ๋ณด์ธ์. ๊ทธ๋ ๊ฒ ํจ์ผ๋ก์จ ์๊ฐ์ ์ผ๋ก ๋งค๋ ฅ์ ์ผ ๋ฟ๋ง ์๋๋ผ ์ฌ์ฉ์์๊ฒ ์ง์ ์ผ๋ก ๋งค๋ ฅ์ ์ด๊ณ ๊ธฐ์ต์ ๋จ๋ ๊ฒฝํ์ ์ ๊ณตํ๋ ์น์ฌ์ดํธ๋ฅผ ๋ง๋ค ์ ์์ต๋๋ค. ๋ธ๋ผ์ฐ์ ์ง์์ด ํ๋๋๊ณ ์ปค๋ฎค๋ํฐ๊ฐ ๋ ๋ฐ์ ๋ ๊ธฐ์ ์ ๊ฐ๋ฐํจ์ ๋ฐ๋ผ, CSS ์คํฌ๋กค ํ์๋ผ์ธ์ ์์ฌํ ์ฌ์ง ์์ด ํ๋ ์น ๊ฐ๋ฐ์ ์์ด์๋ ์ ๋ ๋๊ตฌ๊ฐ ๋ ๊ฒ์ ๋๋ค.
๋ค์ ๋จ๊ณ๋ก, ๊ฐ์ฅ ์ต์ ์ ๋ณด์ ์์ ๋ฅผ ์ํด ๊ณต์ CSS ์ฌ์ ๋ฐ ๋ธ๋ผ์ฐ์ ๋ฌธ์๋ฅผ ์ฐธ์กฐํ์ธ์. ์ฌ๊ธฐ์ ์ ์๋ ์์ ๋ฅผ ์คํํ๊ณ ์ฌ๋ฌ๋ถ์ ์ฐฝ์๋ฌผ์ ๊ฐ๋ฐ์ ์ปค๋ฎค๋ํฐ์ ๊ณต์ ํ์ธ์. CSS ์คํฌ๋กค ํ์๋ผ์ธ์ ์ง์์ ์ธ ๋ฐ์ ์ ๊ธฐ์ฌํ๊ณ ์น ์ ๋๋ฉ์ด์ ์ ๋ฏธ๋๋ฅผ ๋ง๋๋ ๋ฐ ๋์์ ์ฃผ์ธ์.