CSS @spy์ ์ ์ฌ๋ ฅ์ ํ์ํ์ฌ ์ฌ์ฉ์ ์ํธ์์ฉ์ ๋ชจ๋ํฐ๋งํ๊ณ ์น์ฌ์ดํธ ๋์์ ๋์ ์ผ๋ก ์กฐ์ ํ์ธ์. ์ด ์ ๊ธฐ์ ์ ๊ตฌํํ๊ณ ํ์ฉํ๋ ๋ฐฉ๋ฒ์ ๋ฐฐ์๋ณด์ธ์.
CSS @spy: ๋์ ๋ชจ๋ํฐ๋ง โ ์ข ํฉ ๊ฐ์ด๋
์น ๊ฐ๋ฐ ํ๊ฒฝ์ ๋์์์ด ์งํํ๋ฉฐ, ๋์ฑ ์ํธ์์ฉ์ ์ด๊ณ ๋ฐ์์ฑ์ด ๋ฐ์ด๋ ์ฌ์ฉ์ ๊ฒฝํ์ ์๊ตฌํฉ๋๋ค. ๊ธฐ์กด์๋ ์๋ฐ์คํฌ๋ฆฝํธ๊ฐ ๋์ ๋์ ๋ชจ๋ํฐ๋ง์ ์ฃผ๋ก ๋ด๋นํ์ง๋ง, CSS @spy
์ ๋ฑ์ฅ์ ๊ฐ๋ ฅํ ๋์์ ์ ์ํ๋ฉฐ, ์ฌ์ฉ์ ์ํธ์์ฉ์ ์ถ์ ํ๊ณ ๊ทธ์ ๋ฐ๋ผ ์น์ฌ์ดํธ ์คํ์ผ์ ์กฐ์ ํ๋ ๋ฐฉ์์ ํ๋ช
์ ์ผ์ผํฌ ์ ์ฌ๋ ฅ์ ๊ฐ์ง๊ณ ์์ต๋๋ค. ์ด ๊ธ์์๋ CSS @spy
์ ์ ์ฌ๋ ฅ, ๊ตฌํ, ์ฌ์ฉ ์ฌ๋ก ๋ฐ ๋ฏธ๋ ์ ๋ง์ ๋ํด ํฌ๊ด์ ์ผ๋ก ํ๊ตฌํฉ๋๋ค.
CSS @spy๋ ๋ฌด์์ธ๊ฐ?
@spy
๋ ๋๋๋ก CSS ๋์ ๋ชจ๋ํฐ๋ง(CSS Behavior Monitoring)์ด๋ผ๊ณ ๋ ๋ถ๋ฆฌ๋ฉฐ, CSS ์คํ์ผ์ํธ ๋ด์์ ์ง์ ๋ค์ํ ์ฌ์ฉ์ ์ํธ์์ฉ์ด๋ ์์ ์ํ๋ฅผ ๋ชจ๋ํฐ๋งํ๊ณ ๋ฐ์ํ ์ ์๋๋ก ์ ์๋ CSS ๊ธฐ๋ฅ์
๋๋ค. ์คํฌ๋กค๋ง, ํธ๋ฒ๋ง, ํฌ์ปค์ฑ ๋๋ ์์์ ๊ฐ์์ฑ๊ณผ ๊ฐ์ ์ด๋ฒคํธ๋ฅผ ๊ฐ์งํ๊ธฐ ์ํด ์๋ฐ์คํฌ๋ฆฝํธ์๋ง ์์กดํ๋ ๋์ , @spy
๋ฅผ ์ฌ์ฉํ๋ฉด ํน์ ์กฐ๊ฑด์ด ์ถฉ์กฑ๋ ๋ ํธ๋ฆฌ๊ฑฐ๋๋ CSS ๊ท์น์ ์ ์ํ ์ ์์ต๋๋ค. ์ด๋ฅผ ํตํด ๋ณต์กํ ์๋ฐ์คํฌ๋ฆฝํธ ์ด๋ฒคํธ ๋ฆฌ์ค๋์ ํ์์ฑ์ ์์ ๊ณ ๋ ๊น๋ํ๊ณ ์ ์ง๋ณด์ํ๊ธฐ ์ฌ์ด ์ฝ๋๋ฅผ ์์ฑํ ์ ์์ต๋๋ค.
์ ํํ ๊ตฌ๋ฌธ๊ณผ ๊ธฐ๋ฅ์ ์์ง ๊ฐ๋ฐ ์ค์ด๋ฉฐ ๋ณ๊ฒฝ๋ ์ ์์ง๋ง, ํต์ฌ ๊ฐ๋ ์ ์์์ ๊ทธ ์์ฑ์ ๊ด์ฐฐํ ๋ค์ ๊ด์ฐฐ๋ ๋ณ๊ฒฝ ์ฌํญ์ ๋ฐ๋ผ ์คํ์ผ์ ์ ์ฉํ๋ ๊ฒ์ ๋๋ค. ์ด ์ ๊ทผ ๋ฐฉ์์ ๋ธ๋ผ์ฐ์ ์ ๋ค์ดํฐ๋ธ ๋ ๋๋ง ์์ง์ ํ์ฉํ๊ณ , ๋๋๋ก ์ฑ๋ฅ ๋ณ๋ชฉ ํ์์ ์ผ์ผํฌ ์ ์๋ ์๋ฐ์คํฌ๋ฆฝํธ์ ๋ํ ์์กด๋๋ฅผ ์ค์ฌ ์ฑ๋ฅ์ ํฅ์์ํค๋ ๊ฒ์ ๋ชฉํ๋ก ํฉ๋๋ค.
CSS @spy๋ ์ด๋ป๊ฒ ์๋ํ๋๊ฐ?
@spy
์ ๊ธฐ๋ณธ ์๋ฆฌ๋ ํน์ ์กฐ๊ฑด๊ณผ ํด๋น ์กฐ๊ฑด์ด ์ถฉ์กฑ๋ ๋ ์ ์ฉ๋์ด์ผ ํ CSS ๊ท์น์ ์ ์ํ๋ ๊ฒ์
๋๋ค. ์ด๋ฌํ ์กฐ๊ฑด์๋ ๋ค์์ด ํฌํจ๋ ์ ์์ต๋๋ค:
- ์์ ๊ฐ์์ฑ: ์์๊ฐ ๋ทฐํฌํธ์ ๋ค์ด์ค๊ฑฐ๋ ๋๊ฐ ๋๋ฅผ ๊ฐ์งํฉ๋๋ค.
- ์คํฌ๋กค ์์น: ํ์ด์ง๋ ํน์ ์์์ ์คํฌ๋กค ์์น์ ๋ฐ๋ผ ์คํ์ผ์ ํธ๋ฆฌ๊ฑฐํฉ๋๋ค.
- ํธ๋ฒ ์ํ: ์์ ์๋ก ๋ง์ฐ์ค๊ฐ ์ฌ๋ผ๊ฐ์ ๋ ์คํ์ผ์ ๋ณ๊ฒฝํฉ๋๋ค.
- ํฌ์ปค์ค ์ํ: ์์๊ฐ ํฌ์ปค์ค๋ฅผ ๋ฐ์ ๋ ์คํ์ผ์ ์ ์ฉํฉ๋๋ค.
- ๊ต์ฐจ: ํ๋ฉด์์ ๋ ์์๊ฐ ๊ต์ฐจํ ๋๋ฅผ ๊ฐ์งํฉ๋๋ค.
- ์์ฑ ๋ณ๊ฒฝ: ์์์ HTML ์์ฑ ๋ณ๊ฒฝ์ ๊ด์ฐฐํฉ๋๋ค.
๊ธฐ๋ณธ ๊ตฌ์กฐ๋ ๊ด์ฐฐํ ์์, ๋ชจ๋ํฐ๋งํ ์์ฑ ๋๋ ์ด๋ฒคํธ, ๊ทธ๋ฆฌ๊ณ ์ง์ ๋ ์กฐ๊ฑด์ด ์ฐธ์ผ ๋ ์ ์ฉํ CSS ๊ท์น์ ๋ช ์ํ๋ ๊ฒ์ ํฌํจํฉ๋๋ค. ์ด ์ ๊ทผ ๋ฐฉ์์ ๊ธฐ์กด์ ์๋ฐ์คํฌ๋ฆฝํธ ๊ธฐ๋ฐ ์๋ฃจ์ ์ ๋นํด ๋์ ์คํ์ผ๋ง์ ์ฒ๋ฆฌํ๋ ๋ ์ ์ธ์ ์ด๊ณ ํจ์จ์ ์ธ ๋ฐฉ๋ฒ์ ๋ง๋๋ ๊ฒ์ ๋ชฉํ๋ก ํฉ๋๋ค.
CSS @spy์ ์ ์ฌ์ ์ด์
CSS @spy
์ ๋์
์ ์น ๊ฐ๋ฐ์์ ์ฌ์ฉ์ ๋ชจ๋์๊ฒ ์ฌ๋ฌ ์ ์ฌ์ ์ด์ ์ ์ ๊ณตํฉ๋๋ค:
- ์ฑ๋ฅ ํฅ์: ๋์ ๋ชจ๋ํฐ๋ง์ ๋ธ๋ผ์ฐ์ ์ ๋ ๋๋ง ์์ง์ ์์ํจ์ผ๋ก์จ
@spy
๋ ํ์ํ ์๋ฐ์คํฌ๋ฆฝํธ์ ์์ ์ค์ฌ ํ์ด์ง ๋ก๋ ์๊ฐ์ ๋จ์ถํ๊ณ ๋ ๋ถ๋๋ฌ์ด ์ํธ์์ฉ์ ๊ฐ๋ฅํ๊ฒ ํ ์ ์์ต๋๋ค. - ๋ ๊น๋ํ ์ฝ๋: ์คํ์ผ๊ณผ ๋์ ๋ก์ง์ CSS ์คํ์ผ์ํธ๋ก ๋ถ๋ฆฌํ๋ฉด ๋ ๊น๋ํ๊ณ ์ ์ง๋ณด์ํ๊ธฐ ์ฌ์ด ์ฝ๋๋ฒ ์ด์ค๋ฅผ ๋ง๋ค ์ ์์ต๋๋ค.
- ์ ๊ทผ์ฑ ํฅ์: ์ฌ์ฉ์ ์ํธ์์ฉ์ ๊ธฐ๋ฐํ ๋์ ์คํ์ผ๋ง์ ์ฅ์ ๊ฐ ์๋ ์ฌ์ฉ์์ ์ ๊ทผ์ฑ์ ๊ฐ์ ํ๋ ๋ฐ ์ฌ์ฉ๋ ์ ์์ต๋๋ค.
- ๊ฐ๋ฐ ๊ฐ์ํ:
@spy
๋ ๋์ ์คํ์ผ๋ง์ ์ฒ๋ฆฌํ๋ ๋ ์ ์ธ์ ์ธ ๋ฐฉ๋ฒ์ ์ ๊ณตํ์ฌ ๊ฐ๋ฐ ํ๋ก์ธ์ค๋ฅผ ๊ฐ์ํํ ์ ์์ต๋๋ค. - ๋ฐ์์ฑ ์ฆ๊ฐ: ์คํ์ผ์ด ์ฌ์ฉ์ ์ํธ์์ฉ์ ๋ ์ฝ๊ฒ ์ ์ํ์ฌ ๋ ๋ฐ์์ฑ์ด ๋ฐ์ด๋๊ณ ๋งค๋ ฅ์ ์ธ ์ฌ์ฉ์ ๊ฒฝํ์ ๋ง๋ค ์ ์์ต๋๋ค.
CSS @spy์ ์ฌ์ฉ ์ฌ๋ก ์์
๋ค์์ CSS @spy
๋ฅผ ์ฌ์ฉํ์ฌ ์น์ฌ์ดํธ ๊ธฐ๋ฅ์ ํฅ์์ํฌ ์ ์๋ ๋ช ๊ฐ์ง ์ค์ ์ ์ธ ์์์
๋๋ค:
1. ์คํฌ๋กค ๊ธฐ๋ฐ ์ ๋๋ฉ์ด์
๊ฐ ์น์
์ ํฐ ์ด๋ฏธ์ง๊ฐ ํฌํจ๋ ์น์ฌ์ดํธ๋ฅผ ์์ํด ๋ณด์ธ์. @spy
๋ฅผ ์ฌ์ฉํ๋ฉด ๊ฐ ์น์
์ด ํ๋ฉด์ ์คํฌ๋กค๋์ด ๋ค์ด์ฌ ๋ ์ ๋๋ฉ์ด์
์ ํธ๋ฆฌ๊ฑฐํ์ฌ ์ฌ์ฉ์์๊ฒ ์๊ฐ์ ์ผ๋ก ๋งค๋ ฅ์ ์ด๊ณ ํฅ๋ฏธ๋ก์ด ๊ฒฝํ์ ์ ๊ณตํ ์ ์์ต๋๋ค. ์ด๋ฅผ ์ฌ์ฉํ์ฌ ์ฝํ
์ธ ๋ฅผ ํ์ด๋ ์ธํ๊ฑฐ๋, ์์๋ฅผ ํ๋/์ถ์ํ๊ฑฐ๋, ๋ ๋ณต์กํ ์ ๋๋ฉ์ด์
์ ํธ๋ฆฌ๊ฑฐํ ์ ์์ต๋๋ค.
@spy (element: #section1, viewport-enter) {
#section1 .content {
animation: fadeIn 1s ease-in-out;
}
}
์ด ์์๋ #section1
์ด ๋ทฐํฌํธ์ ๋ค์ด์ฌ ๋ ํด๋น ์น์
๋ด์ .content
์์์ fadeIn
์ ๋๋ฉ์ด์
์ ์ ์ฉํ๋ ๋ฐฉ๋ฒ์ ๋ณด์ฌ์ค๋๋ค. ์ด๋ฅผ ํตํด ์๋ฐ์คํฌ๋ฆฝํธ ์คํฌ๋กค ์ด๋ฒคํธ ๋ฆฌ์ค๋๋ Intersection Observer API ํธ์ถ์ด ํ์ ์๊ฒ ๋ฉ๋๋ค.
2. ๊ณ ์ ๋ด๋น๊ฒ์ด์ ๋ฐ
์ฌ์ฉ์๊ฐ ํ์ด์ง๋ฅผ ์๋๋ก ์คํฌ๋กคํ ๋ ํ๋ฉด ์๋จ์ ๊ณ ์ ๋๋ ๋ด๋น๊ฒ์ด์
๋ฐ๋ ์ผ๋ฐ์ ์ธ ๋์์ธ ํจํด์
๋๋ค. @spy
๋ฅผ ์ฌ์ฉํ๋ฉด ์๋ฐ์คํฌ๋ฆฝํธ์ ์์กดํ์ง ์๊ณ ๋ ์ด ๊ธฐ๋ฅ์ ์ฝ๊ฒ ๊ตฌํํ ์ ์์ต๋๋ค. ์คํฌ๋กค ์์น๊ฐ ํน์ ์ง์ ์ ๋๋ฌํ๋ฉด ๋ด๋น๊ฒ์ด์
๋ฐ์ ์์น๊ฐ ๋ณ๊ฒฝ๋ฉ๋๋ค.
@spy (window, scroll > 100px) {
#navbar {
position: fixed;
top: 0;
width: 100%;
z-index: 1000;
}
}
์ด ์์์์, ์ฌ์ฉ์๊ฐ 100ํฝ์
์ด์ ์๋๋ก ์คํฌ๋กคํ๋ฉด ๋ด๋น๊ฒ์ด์
๋ฐ(#navbar
)๊ฐ ํ๋ฉด ์๋จ์ ๊ณ ์ ๋ฉ๋๋ค.
3. ์ด๋ฏธ์ง ์ง์ฐ ๋ก๋ฉ
์ด๋ฏธ์ง ์ง์ฐ ๋ก๋ฉ์ ํนํ ์ด๋ฏธ์ง๊ฐ ๋ง์ ์น์ฌ์ดํธ์ ํ์ด์ง ๋ก๋ ์๊ฐ์ ํฌ๊ฒ ๊ฐ์ ํ ์ ์์ต๋๋ค. @spy
๋ฅผ ์ฌ์ฉํ๋ฉด ์ด๋ฏธ์ง๊ฐ ๊ณง ํ๋ฉด์ ๋ํ๋ ์์ ์ ์ฝ๊ฒ ๊ฐ์งํ ๋ค์ ์ด๋ฏธ์ง ์์ค๋ฅผ ๋์ ์ผ๋ก ๋ก๋ํ ์ ์์ต๋๋ค.
@spy (element: .lazy-image, viewport-enter) {
.lazy-image {
src: attr(data-src);
}
}
์ด ์ฝ๋ ์ค๋ํซ์ .lazy-image
ํด๋์ค๋ฅผ ๊ฐ์ง ์ด๋ฏธ์ง๊ฐ ๋ทฐํฌํธ์ ๋ค์ด์ฌ ๋ ํด๋น ์ด๋ฏธ์ง์ src
์์ฑ์ data-src
์์ฑ ๊ฐ์ผ๋ก ์ค์ ํ๋ ๋ฐฉ๋ฒ์ ๋ณด์ฌ์ค๋๋ค.
4. ๋์ ์์ ์ ํจ์ฑ ๊ฒ์ฌ
@spy
๋ ์ฌ์ฉ์์๊ฒ ์ค์๊ฐ ์์ ์ ํจ์ฑ ๊ฒ์ฌ ํผ๋๋ฐฑ์ ์ ๊ณตํ๋ ๋ฐ ์ฌ์ฉ๋ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, ์ฌ์ฉ์๊ฐ ์ ํจํ ์ด๋ฉ์ผ ์ฃผ์๋ ๋น๋ฐ๋ฒํธ๋ฅผ ์
๋ ฅํ๋์ง ์ฌ๋ถ์ ๋ฐ๋ผ ์
๋ ฅ ํ๋์ ๋ชจ์์ ๋ณ๊ฒฝํ ์ ์์ต๋๋ค.
@spy (element: #email, :valid) {
#email {
border: 2px solid green;
}
}
@spy (element: #email, :invalid) {
#email {
border: 2px solid red;
}
}
์ฌ๊ธฐ์ #email
์
๋ ฅ ํ๋๋ ์
๋ ฅ์ด ์ ํจํ๋ฉด ๋
น์ ํ
๋๋ฆฌ๋ฅผ, ์ ํจํ์ง ์์ผ๋ฉด ๋นจ๊ฐ์ ํ
๋๋ฆฌ๋ฅผ ๊ฐ๊ฒ ๋ฉ๋๋ค. :valid
๋ฐ :invalid
์์ฌ ํด๋์ค๊ฐ ์คํ์ด ๋์์ ํธ๋ฆฌ๊ฑฐํฉ๋๋ค.
5. ๋ฐ์ํ ๋์์ธ ๊ฐ์
@spy
๋ ๊ธฐ์กด ๋ฏธ๋์ด ์ฟผ๋ฆฌ๋ฅผ ๋ณด๊ฐํ์ฌ ๋ค์ํ ๋ทฐํฌํธ ํฌ๊ธฐ ๋ด์์ ์์์ ๊ฐ์์ฑ์ ๋ฐ๋ผ ์คํ์ผ์ ์กฐ์ ํ๋ ๋ฐ ์ฌ์ฉ๋ ์ ์์ต๋๋ค. ์์ ํ๋ฉด์์ ๋๋กญ๋ค์ด ๋ฉ๋ด๋ก ์ถ์๋๋ ์ฌ์ด๋๋ฐ๋ฅผ ์์ํด ๋ณด์ธ์. @spy
๋ฅผ ์ฌ์ฉํ์ฌ ์ฌ์ด๋๋ฐ๊ฐ ๋ ์ด์ ๋ณด์ด์ง ์์ ๋(์ค๋จ์ ์ด ์ถ์๋ฅผ ํธ๋ฆฌ๊ฑฐํ๊ธฐ ๋๋ฌธ์)๋ฅผ ๊ฐ์งํ๊ณ ๊ทธ์ ๋ฐ๋ผ ๋ฉ๋ด ์คํ์ผ์ ์ง์ ํ ์ ์์ต๋๋ค.
@media (max-width: 768px) {
#sidebar {
display: none;
}
@spy (element: #sidebar, :not(:visible)) {
#menu-icon {
display: block; /* Show the menu icon */
}
}
}
์ด๋ ๋ฏธ๋์ด ์ฟผ๋ฆฌ ๋ด์์ ์คํ์ผ๋ง์ ๋์ฑ ์ธ๋ถํํ๋ ๋ฐฉ๋ฒ์ ๋ณด์ฌ์ค๋๋ค. ์ฌ์ด๋๋ฐ๊ฐ ๋ ์ด์ ๋ณด์ด์ง ์์ ๋(์๋ง๋ ๋ฏธ๋์ด ์ฟผ๋ฆฌ๊ฐ ์ ์ฉ๋์ด ์จ๊ฒจ์ก๊ธฐ ๋๋ฌธ์), ๋์ ๋ฉ๋ด ์์ด์ฝ์ด ํ์๋ฉ๋๋ค.
๊ณผ์ ๋ฐ ๊ณ ๋ ค์ฌํญ
CSS @spy
๋ ์์ฒญ๋ ์ ์ฌ๋ ฅ์ ๊ฐ์ง๊ณ ์์ง๋ง, ์ผ๋์ ๋์ด์ผ ํ ๋ช ๊ฐ์ง ๊ณผ์ ์ ๊ณ ๋ ค์ฌํญ์ด ์์ต๋๋ค:
- ๋ธ๋ผ์ฐ์ ์ง์: ์ ์๋ ๊ธฐ๋ฅ์ผ๋ก์,
@spy
๋ ์์ง ๋ธ๋ผ์ฐ์ ์์ ๋๋ฆฌ ์ง์๋์ง ์์ต๋๋ค. ๊ด๋ฒ์ํ ์ฑํ์ ๋ธ๋ผ์ฐ์ ๊ณต๊ธ์ ์ฒด๊ฐ ์ฌ์์ ๊ตฌํํ๋์ง์ ๋ฌ๋ ค ์์ต๋๋ค. - ๋ณต์ก์ฑ: ๊ฐ๋ฐ์ ๋จ์ํํ๋ ๊ฒ์ด ๋ชฉํ์ด์ง๋ง,
@spy
๊ตฌ๋ฌธ์ ๋ง์คํฐํ๊ณ ๊ทธ ๋ฏธ๋ฌํ ์ฐจ์ด๋ฅผ ์ดํดํ๋ ๋ฐ๋ ๊ฐ๋ฐ์์๊ฒ ํ์ต ๊ณก์ ์ด ํ์ํ ์ ์์ต๋๋ค. - ์ฑ๋ฅ ์ํฅ: ์ฑ๋ฅ ํฅ์์ ์๋ํ์ง๋ง, ์๋ชป ๊ตฌํ๋
@spy
๊ท์น์ ์ ์คํ๊ฒ ์ต์ ํ๋์ง ์์ผ๋ฉด ์ ์ฌ์ ์ผ๋ก ์ฑ๋ฅ ๋ฌธ์ ๋ฅผ ์ผ์ผํฌ ์ ์์ต๋๋ค. - ์ ๊ทผ์ฑ:
@spy
๊ธฐ๋ฐ ์คํ์ผ๋ง์ด ์ฅ์ ๊ฐ ์๋ ์ฌ์ฉ์์ ์ ๊ทผ์ฑ์ ์ ํดํ์ง ์๊ณ ํฅ์์ํค๋๋ก ํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค. ์์ ๋๋น, ํฌ์ปค์ค ํ์๊ธฐ ๋ฐ ๊ธฐํ ์ ๊ทผ์ฑ ๋ชจ๋ฒ ์ฌ๋ก์ ๋ํด ์ ์คํ๊ฒ ๊ณ ๋ คํด์ผ ํฉ๋๋ค. - ๋๋ฒ๊น
: ๊ธฐ์กด์ CSS ๋๋ฒ๊น
๋ฐฉ๋ฒ์ผ๋ก๋ ์ถฉ๋ถํ์ง ์์ ์ ์์ผ๋ฏ๋ก,
@spy
๊ท์น์ ๋๋ฒ๊น ํ๋ ค๋ฉด ํน์ํ ๋๊ตฌ์ ๊ธฐ์ ์ด ํ์ํ ์ ์์ต๋๋ค.
CSS @spy์ ๋ฏธ๋
CSS @spy
์ ๋ฏธ๋๋ ๋ธ๋ผ์ฐ์ ๊ณต๊ธ์
์ฒด์ ์ํ ํ์คํ ๋ฐ ๊ตฌํ์ ๋ฌ๋ ค ์์ต๋๋ค. ๋๋ฆฌ ์ฑํ๋๋ค๋ฉด, ๋ ์ ์ ์๋ฐ์คํฌ๋ฆฝํธ๋ก ๋ ๋์ ์ด๊ณ ๋ฐ์์ ์ธ ์ฌ์ฉ์ ๊ฒฝํ์ ๊ฐ๋ฅํ๊ฒ ํ์ฌ ์น ๊ฐ๋ฐ์ ์๋นํ ์ํฅ์ ๋ฏธ์น ์ ์ฌ๋ ฅ์ ๊ฐ์ง๊ณ ์์ต๋๋ค. ์น์ด ๋์ฑ ์ํธ์์ฉ์ ์ด๊ณ ๋ชฐ์
๊ฐ ์๋ ๊ฒฝํ์ผ๋ก ๊ณ์ ์งํํจ์ ๋ฐ๋ผ, @spy
๋ ํ๋ก ํธ์๋ ๊ฐ๋ฐ์ ๋ฏธ๋๋ฅผ ํ์ฑํ๋ ๋ฐ ์ค์ํ ์ญํ ์ ํ ์ ์์ต๋๋ค.
ํ์คํ ๊ณผ์ ์์ฒด๋ ์ฌ๋ฌ ๋ฒ์ ๋ฐ๋ณต, ์น ๊ฐ๋ฐ ์ปค๋ฎค๋ํฐ์ ํผ๋๋ฐฑ, ๊ทธ๋ฆฌ๊ณ ์ฑ๋ฅ, ๋ณด์, ์ ๊ทผ์ฑ ์ํฅ์ ๋ํ ์ ์คํ ๊ณ ๋ ค๋ฅผ ํฌํจํ ๊ฐ๋ฅ์ฑ์ด ๋์ต๋๋ค. ๋ธ๋ผ์ฐ์ ๊ณต๊ธ์
์ฒด, ์น ํ์ค ๊ธฐ๊ตฌ(W3C ๋ฑ), ๊ทธ๋ฆฌ๊ณ ๊ฐ๋ฐ์ ๊ฐ์ ํ๋ ฅ์ @spy
๊ฐ ๋ชจ๋ ์ฌ๋์๊ฒ ์ด์ต์ด ๋๋ ๋ฐฉ์์ผ๋ก ๊ตฌํ๋๋๋ก ๋ณด์ฅํ๋ ๋ฐ ํ์์ ์ผ ๊ฒ์
๋๋ค.
์ต์ ์ ๋ณด ํ์ธ ๋ฐฉ๋ฒ
CSS @spy
์ ๊ฐ๋ฐ์ ๋ํ ์ต์ ์ ๋ณด๋ฅผ ์ป์ผ๋ ค๋ฉด ๋ค์ ๋ฆฌ์์ค๋ฅผ ๊ณ ๋ คํ์ญ์์ค:
- W3C ์ฌ์: ๊ณต์ W3C(World Wide Web Consortium) ์ฌ์์์ CSS ๋ชจ๋ ๋ฐ ์ ์๋ ๊ธฐ๋ฅ์ ๋ํ ์ ๋ฐ์ดํธ๋ฅผ ๋ชจ๋ํฐ๋งํ์ธ์.
- ๋ธ๋ผ์ฐ์ ๊ณต๊ธ์ ์ฒด ๋ธ๋ก๊ทธ: ์ฃผ์ ๋ธ๋ผ์ฐ์ ๊ณต๊ธ์ ์ฒด(์: Google Chrome, Mozilla Firefox, Apple Safari)์ ๋ธ๋ก๊ทธ์ ๊ฐ๋ฐ์ ๋ฆฌ์์ค๋ฅผ ํ๋ก์ฐํ์ฌ ๊ณต์ง์ฌํญ ๋ฐ ์คํ์ ๊ธฐ๋ฅ์ ํ์ธํ์ธ์.
- ์น ๊ฐ๋ฐ ์ปค๋ฎค๋ํฐ: ์น ๊ฐ๋ฐ๊ณผ ๊ด๋ จ๋ ์จ๋ผ์ธ ํฌ๋ผ, ์์ ๋ฏธ๋์ด ๊ทธ๋ฃน, ์ปจํผ๋ฐ์ค์ ์ฐธ์ฌํ์ฌ ๋ค๋ฅธ ๊ฐ๋ฐ์๋ก๋ถํฐ ๋ฐฐ์ฐ๊ณ ํต์ฐฐ๋ ฅ์ ๊ณต์ ํ์ธ์.
- CSS-Tricks ๋ฐ Smashing Magazine: ์ด๋ฌํ ์จ๋ผ์ธ ๋ฆฌ์์ค๋ CSS ๊ธฐ๋ฅ์ ๊ดํ ์ฌ์ธต์ ์ธ ํํ ๋ฆฌ์ผ๊ณผ ๋ด์ค๋ฅผ ์ ๊ณตํ๋ ๊ฒ์ผ๋ก ์ ๋ช ํฉ๋๋ค.
๊ธ๋ก๋ฒ ๊ณ ๋ ค์ฌํญ
@spy
๋ ๋ค๋ฅธ ์น ๊ธฐ์ ์ ์ฌ์ฉํ ๋๋ ์ ์ธ๊ณ ์ฌ์ฉ์๋ฅผ ๊ณ ๋ คํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค. ์ฌ๊ธฐ์๋ ๋ค์์ด ํฌํจ๋ฉ๋๋ค:
- ํ์งํ: ๋ชจ๋ ๋์ ์คํ์ผ ๋ณ๊ฒฝ์ด ๋ค๋ฅธ ์ธ์ด ๋ฐ ์ฐ๊ธฐ ๋ฐฉํฅ(์: ์ค๋ฅธ์ชฝ์์ ์ผ์ชฝ์ผ๋ก ์ฐ๋ ์ธ์ด)๊ณผ ํธํ๋๋์ง ํ์ธํ์ธ์.
- ์ ๊ทผ์ฑ: ๊ตญ์ ์ ๊ทผ์ฑ ํ์ค(์: WCAG)์ ์ค์ํ์ฌ ์ ์ธ๊ณ ์ฅ์ ์ธ์ด ์น์ฌ์ดํธ๋ฅผ ์ฌ์ฉํ ์ ์๋๋ก ๋ณด์ฅํ์ธ์.
- ์ฑ๋ฅ: ์ฝ๋๋ฅผ ์ต์ ํํ์ฌ ์น์ฌ์ดํธ๊ฐ ๋น ๋ฅด๊ฒ ๋ก๋๋๊ณ ๋ค์ํ ๋คํธ์ํฌ ์๋์ ์ฒ๋ฆฌ ๋ฅ๋ ฅ์ ๊ฐ์ง ์ฅ์น์์ ์ ์๋ํ๋๋ก ๋ณด์ฅํ์ธ์. ์ง์ญ๋ง๋ค ์ฌ์ฉ์์ ์ธํฐ๋ท ์ฐ๊ฒฐ ์๋๊ฐ ํฌ๊ฒ ๋ค๋ฅผ ์ ์์ต๋๋ค.
- ๋ฌธํ์ ๋ฏผ๊ฐ์ฑ: ์น์ฌ์ดํธ๋ฅผ ๋์์ธํ๊ณ ์ด๋ฏธ์ง์ ์คํ์ผ์ ์ ํํ ๋ ๋ฌธํ์ ์ฐจ์ด๋ฅผ ์ผ๋์ ๋์ธ์.
๊ฒฐ๋ก
CSS @spy
๋ CSS ์งํ์ ์ค์ํ ์ง์ ์ ๋ํ๋ด๋ฉฐ, ๋ ๋์ ์ด๊ณ ๋ฐ์์ ์ด๋ฉฐ ์ฑ๋ฅ์ด ๋ฐ์ด๋ ์น ๊ฒฝํ์ ๋ง๋ค ์ ์๋ ์ ์ฌ๋ ฅ์ ์ ๊ณตํฉ๋๋ค. ์์ง ์ ๊ธฐ์ ์ด์ง๋ง, ๊ทธ ์ ์ฌ๋ ฅ์ ์ดํดํ๊ณ ๊ฐ๋ฐ ์ํฉ์ ํ์
ํ๋ ๊ฒ์ ํ๋ก ํธ์๋ ๊ฐ๋ฐ์ ์ต์ ๋ฐ์ ์ ํ์ฉํ๋ ค๋ ์น ๊ฐ๋ฐ์์๊ฒ ๋งค์ฐ ์ค์ํฉ๋๋ค. ๋ธ๋ผ์ฐ์ ์ง์์ด ํ๋๋๊ณ ์ฌ์์ด ์ฑ์ํด์ง์ ๋ฐ๋ผ, @spy
๋ ํ๋ ์น ์ ํ๋ฆฌ์ผ์ด์
์ ๊ตฌ์ถํ๋ ๋ฐ ์ ์ ๋ ์ค์ํ ๋๊ตฌ๊ฐ ๋ ๊ฒ์
๋๋ค. ๊ณผ์ ๋ฅผ ์ ์คํ๊ฒ ๊ณ ๋ คํ๊ณ ๊ธฐํ๋ฅผ ์์ฉํจ์ผ๋ก์จ, ์ฐ๋ฆฌ๋ @spy
์ ํ์ ํ์ฉํ์ฌ ์ ์ธ๊ณ ์ฌ์ฉ์๋ฅผ ์ํด ๋ ๋งค๋ ฅ์ ์ด๊ณ ์ ๊ทผ ๊ฐ๋ฅํ๋ฉฐ ์ฌ์ฉ์ ์นํ์ ์ธ ์น์ฌ์ดํธ๋ฅผ ๋ง๋ค ์ ์์ต๋๋ค.