CSS์ WCAG ๊ฐ์ด๋๋ผ์ธ์ ๊ตฌํํ์ฌ ๋ชจ๋ ์ฌ๋์ด ์น์ฌ์ดํธ์ ์ ๊ทผํ ์ ์๋๋ก ํ๋ ๋ฐฉ๋ฒ์ ๋ฐฐ์ฐ์ธ์. ๊ธ๋ก๋ฒ ์ฌ์ฉ์๋ฅผ ์ํ ํฌ์ฉ์ ์ธ ๋์์ธ์ ๋ง๋์ธ์.
CSS์์์ ์ ๊ทผ์ฑ: WCAG ์ค์๋ฅผ ์ํ ์ค์ฉ ๊ฐ์ด๋
์ค๋๋ ์ ์ ๋ ๋์งํธํ๋๋ ์ธ์์์ ์น ์ ๊ทผ์ฑ์ ๋ณด์ฅํ๋ ๊ฒ์ ๋จ์ํ ๋ชจ๋ฒ ์ฌ๋ก๊ฐ ์๋๋ผ ์ค๋ฆฌ์ ์๋ฌด์ ๋๋ค. ์ ๊ทผ ๊ฐ๋ฅํ ์น์ฌ์ดํธ๋ ์ฌ์ฉ์์ ๋ฅ๋ ฅ์ ๊ด๊ณ์์ด ๋ชจ๋ ์ฌ์ฉ์์๊ฒ ๋๋ฑํ ์ ๊ทผ๊ณผ ๊ธฐํ๋ฅผ ์ ๊ณตํฉ๋๋ค. ์ด ๊ฐ์ด๋๋ ์น ์ฝํ ์ธ ์ ๊ทผ์ฑ ๊ฐ์ด๋๋ผ์ธ(WCAG)์ ์ค์ํ์ฌ CSS๋ฅผ ํ์ฉํด ์ ๊ทผ์ฑ ๋๊ณ ํฌ์ฉ์ ์ธ ์น ๊ฒฝํ์ ๋ง๋๋ ๋ฐฉ๋ฒ์ ์ค์ ์ ๋ก๋๋ค.
WCAG๋ ๋ฌด์์ด๋ฉฐ ์ ์ค์ํ๊ฐ?
์น ์ฝํ ์ธ ์ ๊ทผ์ฑ ๊ฐ์ด๋๋ผ์ธ(WCAG)์ ์ฅ์ ๊ฐ ์๋ ์ฌ๋๋ค์ด ์น ์ฝํ ์ธ ์ ๋ ์ฝ๊ฒ ์ ๊ทผํ ์ ์๋๋ก ํ๊ธฐ ์ํ ๊ตญ์ ์ ์ผ๋ก ์ธ์ ๋ ๊ถ๊ณ ์ ๋ชจ์์ ๋๋ค. ์๋ ์์ด๋ ์น ์ปจ์์์(W3C)์์ ๊ฐ๋ฐํ WCAG๋ ๊ฐ์ธ, ์กฐ์ง ๋ฐ ๊ฐ๊ตญ ์ ๋ถ์ ์๊ตฌ๋ฅผ ์ถฉ์กฑํ๋ ์น ์ ๊ทผ์ฑ์ ๋ํ ๊ณตํต๋ ํ์ค์ ์ ๊ณตํฉ๋๋ค. WCAG๊ฐ ์ค์ํ ์ด์ ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
- ํฌ์ฉ์ฑ์ ์ฆ์งํ์ฌ ๋ชจ๋ ์ฌ๋์ด ์น์ฌ์ดํธ์ ์ ๊ทผํ๊ณ ์ฌ์ฉํ ์ ์๋๋ก ๋ณด์ฅํฉ๋๋ค.
- ์ฅ์ ๊ฐ ์๋ ์ฌ์ฉ์๋ฟ๋ง ์๋๋ผ ๋ชจ๋ ์ฌ์ฉ์์ ์ฌ์ฉ์ ๊ฒฝํ์ ํฅ์์ํต๋๋ค.
- ์น์ฌ์ดํธ์ SEO(๊ฒ์ ์์ง ์ต์ ํ)๋ฅผ ํฅ์์ํฌ ์ ์์ต๋๋ค.
- ์ผ๋ถ ์ง์ญ์์๋ ๋ฒ์ ์ผ๋ก ์๊ตฌ๋ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, ๋ง์ ๊ตญ๊ฐ์์ ์ ๋ถ ์น์ฌ์ดํธ ๋ฐ ํน์ ๋ฏผ๊ฐ ๋ถ๋ฌธ ๊ธฐ๊ด์ ๋ํ ์น ์ ๊ทผ์ฑ์ ์๋ฌดํํ๋ ๋ฒ๋ฅ ์ ์ํํ๊ณ ์์ต๋๋ค. ๋ฏธ๊ตญ์ ์ฅ์ ์ธ๋ฒ(ADA)์ ์น์ฌ์ดํธ์๋ ์ ์ฉ๋๋ ๊ฒ์ผ๋ก ํด์๋์์ต๋๋ค. ์ ๋ฝ์์๋ ์ ๋ฝ ์ ๊ทผ์ฑ๋ฒ(European Accessibility Act)์ด ์น์ฌ์ดํธ์ ๋ชจ๋ฐ์ผ ์ ํ๋ฆฌ์ผ์ด์ ์ ํฌํจํ ๊ด๋ฒ์ํ ์ ํ ๋ฐ ์๋น์ค์ ๋ํ ์ ๊ทผ์ฑ ์๊ตฌ์ฌํญ์ ์ค์ ํฉ๋๋ค. ํธ์ฃผ์๋ ์น ์ ๊ทผ์ฑ์ ํฌ๊ดํ๋ ์ฅ์ ์ฐจ๋ณ ๊ธ์ง๋ฒ(Disability Discrimination Act)์ด ์์ต๋๋ค.
- ์ฌํ์ ์ฑ ์์ ๋ณด์ฌ์ฃผ๊ณ ๋ธ๋๋ ํํ์ ๊ฐํํฉ๋๋ค.
WCAG ์์น: POUR
WCAG๋ ๋ค ๊ฐ์ง ํต์ฌ ์์น์ ๊ธฐ๋ฐํ๋ฉฐ, ๋ณดํต ์ฝ์ด POUR๋ก ๊ธฐ์ต๋ฉ๋๋ค:
- ์ธ์ ๊ฐ๋ฅ(Perceivable): ์ ๋ณด์ ์ฌ์ฉ์ ์ธํฐํ์ด์ค ๊ตฌ์ฑ์์๋ ์ฌ์ฉ์๊ฐ ์ธ์ํ ์ ์๋ ๋ฐฉ์์ผ๋ก ์ ์๋์ด์ผ ํฉ๋๋ค.
- ์ด์ฉ ๊ฐ๋ฅ(Operable): ์ฌ์ฉ์ ์ธํฐํ์ด์ค ๊ตฌ์ฑ์์์ ๋ด๋น๊ฒ์ด์ ์ ์ด์ฉ ๊ฐ๋ฅํด์ผ ํฉ๋๋ค.
- ์ดํด ๊ฐ๋ฅ(Understandable): ์ ๋ณด์ ์ฌ์ฉ์ ์ธํฐํ์ด์ค์ ์๋์ ์ดํด ๊ฐ๋ฅํด์ผ ํฉ๋๋ค.
- ๊ฒฌ๊ณ ํจ(Robust): ์ฝํ ์ธ ๋ ๋ณด์กฐ ๊ธฐ์ ์ ํฌํจํ ๋ค์ํ ์ฌ์ฉ์ ์์ด์ ํธ๊ฐ ์ ๋ขฐ์ฑ ์๊ฒ ํด์ํ ์ ์๋๋ก ์ถฉ๋ถํ ๊ฒฌ๊ณ ํด์ผ ํฉ๋๋ค.
์ ๊ทผ์ฑ์ ์ํ CSS ๊ธฐ์
CSS๋ WCAG ์ค์๋ฅผ ๋ฌ์ฑํ๋ ๋ฐ ์ค์ํ ์ญํ ์ ํฉ๋๋ค. ๊ณ ๋ คํด์ผ ํ ๋ช ๊ฐ์ง ์ฃผ์ CSS ๊ธฐ์ ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
1. ์๋งจํฑ HTML๊ณผ CSS
์๋งจํฑ HTML ์์๋ฅผ ์ฌ๋ฐ๋ฅด๊ฒ ์ฌ์ฉํ๋ฉด ์ฝํ ์ธ ์ ์๋ฏธ์ ๊ตฌ์กฐ๋ฅผ ์ ๊ณตํ์ฌ ์คํฌ๋ฆฐ ๋ฆฌ๋ ๋ฐ ๊ธฐํ ๋ณด์กฐ ๊ธฐ์ ์ด ๋ ์ฝ๊ฒ ์ ๊ทผํ ์ ์๊ฒ ํฉ๋๋ค. ๊ทธ๋ฐ ๋ค์ CSS๋ ์ด๋ฌํ ์๋งจํฑ ์์์ ํํ์ ํฅ์์ํต๋๋ค.
์์:
๋ชจ๋ ๊ฒ์ ์ผ๋ฐ์ ์ธ <div>
์์๋ฅผ ์ฌ์ฉํ๋ ๋์ , <article>
, <nav>
, <aside>
, <header>
, <footer>
, <main>
, <section>
๊ณผ ๊ฐ์ ์๋งจํฑ ์์์ ์ ๋ชฉ ํ๊ทธ(<h1>
๋ถํฐ <h6>
)๋ฅผ ์ฌ์ฉํ์ธ์.
HTML:
<article>
<h2>Article Title</h2>
<p>Article content goes here.</p>
</article>
CSS:
article {
margin-bottom: 20px;
}
h2 {
font-size: 1.5em;
font-weight: bold;
margin-bottom: 10px;
}
<article>
๊ณผ <h2>
๋ฅผ ์ฌ์ฉํจ์ผ๋ก์จ ์ฝํ
์ธ ์ ์๋งจํฑ ์๋ฏธ๋ฅผ ๋ถ์ฌํ๊ฒ ๋๋ฉฐ, ์ด๋ ๋ณด์กฐ ๊ธฐ์ ์ด ๊ตฌ์กฐ์ ๋งฅ๋ฝ์ ์ดํดํ๋ ๋ฐ ๋์์ด ๋ฉ๋๋ค.
2. ์์๊ณผ ๋๋น
์ ์๋ ฅ์ด๋ ์๋งน์ธ ์ฌ์ฉ์๊ฐ ์ฝํ ์ธ ๋ฅผ ์ฝ์ ์ ์๋๋ก ํ ์คํธ์ ๋ฐฐ๊ฒฝ์ ๊ฐ์ ์ถฉ๋ถํ ์์ ๋๋น๋ฅผ ๋ณด์ฅํ์ธ์. WCAG 2.1 ๋ ๋ฒจ AA๋ ์ผ๋ฐ ํ ์คํธ์ ๊ฒฝ์ฐ ์ต์ 4.5:1, ํฐ ํ ์คํธ(18pt ๋๋ 14pt ๊ตต๊ฒ)์ ๊ฒฝ์ฐ 3:1์ ๋ช ์๋น๋ฅผ ์๊ตฌํฉ๋๋ค.
์์ ๋๋น ํ์ธ ๋๊ตฌ:
- WebAIM์ ์์ ๋๋น ๊ฒ์ฌ๊ธฐ: https://webaim.org/resources/contrastchecker/
- ์ ๊ทผ์ฑ ์๋ ์์ ํ๋ ํธ ๋น๋: https://www.learnui.design/tools/accessible-color-palette-builder.html
- Chrome ๊ฐ๋ฐ์ ๋๊ตฌ: Chrome ๊ฐ๋ฐ์ ๋๊ตฌ๋ ๋ด์ฅ๋ ์์ ๋๋น ํ์ธ ๊ธฐ๋ฅ์ ์ ๊ณตํฉ๋๋ค.
์์:
/* ์ข์ ๋๋น */
body {
background-color: #000000; /* ๊ฒ์ */
color: #FFFFFF; /* ํฐ์ */
}
/* ๋์ ๋๋น */
body {
background-color: #FFFFFF; /* ํฐ์ */
color: #F0F0F0; /* ๋ฐ์ ํ์ */
}
์ฒซ ๋ฒ์งธ ์์๋ ์ข์ ๋๋น๋ฅผ ์ ๊ณตํ์ง๋ง, ๋ ๋ฒ์งธ ์์๋ ๋๋น๊ฐ ๋ฎ์ ๋ง์ ์ฌ์ฉ์๊ฐ ์ฝ๊ธฐ ์ด๋ ค์ธ ๊ฒ์ ๋๋ค.
์์ ๋๋จธ์ ๊ณ ๋ ค์ฌํญ: ์ ๋ณด๋ฅผ ์ ๋ฌํ๊ธฐ ์ํด ์์์๋ง ์์กดํ์ง ๋ง์ธ์. ๋ชจ๋ ์ฌ๋์ด ์ ๋ณด์ ์ ๊ทผํ ์ ์๋๋ก ์์ ์ธ์ ํ ์คํธ ๋ ์ด๋ธ, ์์ด์ฝ ๋๋ ๊ธฐํ ์๊ฐ์ ๋จ์๋ฅผ ์ฌ์ฉํ์ธ์. ์๋ฅผ ๋ค์ด, ํ์ ์ ๋ ฅ ํ๋๋ฅผ ๋นจ๊ฐ์์ผ๋ก ๊ฐ์กฐํ๋ ๋์ , ๋นจ๊ฐ์ ํ ๋๋ฆฌ์ "(ํ์)"์ ๊ฐ์ ํ ์คํธ ๋ ์ด๋ธ์ ํจ๊ป ์ฌ์ฉํ์ธ์.
3. ํฌ์ปค์ค ํ์์
์ฌ์ฉ์๊ฐ ํค๋ณด๋(์: Tab ํค ์ฌ์ฉ)๋ก ์น์ฌ์ดํธ๋ฅผ ํ์ํ ๋, ํ์ฌ ์ด๋ค ์์์ ํฌ์ปค์ค๊ฐ ์๋์ง ์ ์ ์๋๋ก ๋ช ํํ ์๊ฐ์ ํฌ์ปค์ค ํ์์๋ฅผ ์ ๊ณตํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค. ๋ธ๋ผ์ฐ์ ์ ๊ธฐ๋ณธ ํฌ์ปค์ค ํ์์๋ ๋ถ์ถฉ๋ถํ๊ฑฐ๋ ๊ฒฝ์ฐ์ ๋ฐ๋ผ ๋ณด์ด์ง ์์ ์ ์์ต๋๋ค. CSS๋ฅผ ์ฌ์ฉํ์ฌ ํฌ์ปค์ค ํ์์๋ฅผ ๋ ๋์ ๋๊ฒ ๋ง์ถค ์ค์ ํ์ธ์.
์์:a:focus, button:focus, input:focus, textarea:focus, select:focus { outline: 2px solid #007bff; /* ํ๋์ ์ธ๊ณฝ์ */ outline-offset: 2px; /* ์์์ ์ธ๊ณฝ์ ์ฌ์ด์ ๊ณต๊ฐ์ ๋ง๋ฆ */ }
์ด CSS ์ฝ๋๋ ์์๊ฐ ํฌ์ปค์ค๋ฅผ ๋ฐ์ ๋ ํ๋์ ์ธ๊ณฝ์ ์ ์ถ๊ฐํฉ๋๋ค. outline-offset
์์ฑ์ ์์์ ์ธ๊ณฝ์ ์ฌ์ด์ ์์ ๊ณต๊ฐ์ ์ถ๊ฐํ์ฌ ๊ฐ์์ฑ์ ํฅ์์ํต๋๋ค. ์ ์ ํ ๋์ฒด ์๋จ์ ์ ๊ณตํ์ง ์๊ณ ํฌ์ปค์ค ํ์์๋ฅผ ์์ ํ ์ ๊ฑฐํ๋ ๊ฒ์ ํผํด์ผ ํฉ๋๋ค. ์ด๋ ํค๋ณด๋ ์ฌ์ฉ์๊ฐ ์น์ฌ์ดํธ๋ฅผ ์ฌ์ฉํ ์ ์๊ฒ ๋ง๋ค ์ ์๊ธฐ ๋๋ฌธ์
๋๋ค.
4. ํค๋ณด๋ ํ์
๋ชจ๋ ์ํธ์์ฉ ์์(๋งํฌ, ๋ฒํผ, ์์ ํ๋ ๋ฑ)๊ฐ ํค๋ณด๋๋ฅผ ์ฌ์ฉํ์ฌ ํ์ ๊ฐ๋ฅํ๋๋ก ๋ณด์ฅํ์ธ์. ์ด๋ ๋ง์ฐ์ค๋ฅผ ์ฌ์ฉํ ์ ์๋ ์ฌ์ฉ์์๊ฒ ํ์์ ์ ๋๋ค. ๋ ผ๋ฆฌ์ ์ธ ํ์ ํ๋ฆ์ ๋ณด์ฅํ๊ธฐ ์ํด HTML ์์ค ์ฝ๋์ ์์ ์์๋ ํ์ด์ง์ ์๊ฐ์ ์์์ ์ผ์นํด์ผ ํฉ๋๋ค. ๋ ผ๋ฆฌ์ ์ธ ํค๋ณด๋ ํ์ ์์๋ฅผ ์ ์งํ๋ฉด์ ์์๋ฅผ ์๊ฐ์ ์ผ๋ก ์ฌ๋ฐฐ์นํ๊ธฐ ์ํด CSS๋ฅผ ์ฌ์ฉํ์ธ์.
์์:
CSS๋ฅผ ์ฌ์ฉํ์ฌ ํ๋ฉด ์ค๋ฅธ์ชฝ์ ๋ด๋น๊ฒ์ด์ ๋ฉ๋ด๋ฅผ ํ์ํ๊ณ ์ถ๋ค๊ณ ๊ฐ์ ํด ๋ด ์๋ค. ๊ทธ๋ฌ๋ ์ ๊ทผ์ฑ์ ์ํด, ์คํฌ๋ฆฐ ๋ฆฌ๋ ์ฌ์ฉ์๊ฐ ์ฃผ ์ฝํ ์ธ ๋ณด๋ค ๋จผ์ ๋ด๋น๊ฒ์ด์ ๋ฉ๋ด๋ฅผ ๋ง๋๋๋ก HTML ์์ค ์ฝ๋์์ ๋จผ์ ๋ํ๋๊ฒ ํ๊ณ ์ถ์ต๋๋ค.
HTML:
<nav>
<ul>
<li><a href="#">Home</a></li>
<li><a href="#">About</a></li>
<li><a href="#">Services</a></li>
<li><a href="#">Contact</a></li>
</ul>
</nav>
<main>
<h1>Main Content</h1>
<p>This is the main content of the page.</p>
</main>
CSS:
body {
display: flex;
}
nav {
order: 1; /* ๋ด๋น๊ฒ์ด์
์ ์ค๋ฅธ์ชฝ์ผ๋ก ์ด๋ */
width: 200px;
padding: 20px;
}
main {
order: 0; /* ์ฃผ์ ์ฝํ
์ธ ๋ฅผ ์ผ์ชฝ์ ์ ์ง */
flex: 1;
padding: 20px;
}
CSS์ order
์์ฑ์ ์ฌ์ฉํ๋ฉด HTML ์์ค ์ฝ๋์์ ์๋ ์์น๋ฅผ ์ ์งํ๋ฉด์ ๋ด๋น๊ฒ์ด์
๋ฉ๋ด๋ฅผ ํ๋ฉด ์ค๋ฅธ์ชฝ์ผ๋ก ์๊ฐ์ ์ผ๋ก ์ฌ๋ฐฐ์นํ ์ ์์ต๋๋ค. ์ด๋ฅผ ํตํด ํค๋ณด๋ ์ฌ์ฉ์๊ฐ ๋ด๋น๊ฒ์ด์
๋ฉ๋ด๋ฅผ ๋จผ์ ๋ง๋๊ฒ ๋์ด ์ ๊ทผ์ฑ์ด ํฅ์๋ฉ๋๋ค.
5. ์ฑ ์๊ฐ ์๊ฒ ์ฝํ ์ธ ์จ๊ธฐ๊ธฐ
๋๋ก๋ ์๊ฐ์ ํ์์์ ์ฝํ
์ธ ๋ฅผ ์จ๊ฒจ์ผ ํ์ง๋ง ์คํฌ๋ฆฐ ๋ฆฌ๋์๋ ์ ๊ทผ ๊ฐ๋ฅํ๊ฒ ์ ์งํด์ผ ํ ๋๊ฐ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, ์์ด์ฝ์ผ๋ก๋ง ์๊ฐ์ ์ผ๋ก ํํ๋ ๋งํฌ๋ ๋ฒํผ์ ์ถ๊ฐ์ ์ธ ๋งฅ๋ฝ์ ์ ๊ณตํ๊ณ ์ถ์ ์ ์์ต๋๋ค. display: none
์ด๋ visibility: hidden
์ฌ์ฉ์ ํผํ์ธ์. ์ด ์์ฑ๋ค์ ์๊ฐ์ ์ฌ์ฉ์์ ์คํฌ๋ฆฐ ๋ฆฌ๋ ๋ชจ๋์๊ฒ์ ์ฝํ
์ธ ๋ฅผ ์จ๊ธฐ๊ธฐ ๋๋ฌธ์
๋๋ค. ๋์ , ๋ณด์กฐ ๊ธฐ์ ์ ์ ๊ทผ ๊ฐ๋ฅํ๊ฒ ์ ์งํ๋ฉด์ ์ฝํ
์ธ ๋ฅผ ์๊ฐ์ ์ผ๋ก ์จ๊ธฐ๋ ๊ธฐ์ ์ ์ฌ์ฉํ์ธ์.
์์:
.sr-only {
position: absolute;
width: 1px;
height: 1px;
padding: 0;
margin: -1px;
overflow: hidden;
clip: rect(0, 0, 0, 0);
white-space: nowrap;
border: 0;
}
์ด CSS ํด๋์ค๋ ์์๋ฅผ ์คํฌ๋ฆฐ ๋ฆฌ๋์ ์ ๊ทผ ๊ฐ๋ฅํ๊ฒ ์ ์งํ๋ฉด์ ์๊ฐ์ ์ผ๋ก ์จ๊น๋๋ค. ์คํฌ๋ฆฐ ๋ฆฌ๋๊ฐ ์ฝ๊ธฐ๋ฅผ ์ํ์ง๋ง ์๊ฐ์ ์ผ๋ก๋ ํ์๋์ง ์๊ธฐ๋ฅผ ์ํ๋ ํ ์คํธ์ ์ด ํด๋์ค๋ฅผ ์ ์ฉํ์ธ์.
HTML ์์:
<a href="#">Edit <span class="sr-only">item</span></a>
์ด ์์์์ "item" ํ ์คํธ๋ ์๊ฐ์ ์ผ๋ก ์จ๊ฒจ์ ธ ์์ง๋ง ์คํฌ๋ฆฐ ๋ฆฌ๋์ ์ํด ์ฝํ๊ฒ ๋์ด "Edit" ๋งํฌ์ ๋ํ ๋งฅ๋ฝ์ ์ ๊ณตํฉ๋๋ค.
ARIA ์์ฑ(Accessible Rich Internet Applications): ๋์ ์ฝํ ์ธ ๋ฐ ๋ณต์กํ UI ๊ตฌ์ฑ ์์์ ์ ๊ทผ์ฑ์ ํฅ์์ํค๊ธฐ ์ํด ARIA ์์ฑ์ ์ ์คํ๊ฒ ์ฌ์ฉํ์ธ์. ARIA ์์ฑ์ ๋ณด์กฐ ๊ธฐ์ ์ ์ถ๊ฐ์ ์ธ ์๋งจํฑ ์ ๋ณด๋ฅผ ์ ๊ณตํฉ๋๋ค. ๊ทธ๋ฌ๋ ์๋งจํฑ HTML๋ก ํด๊ฒฐํ ์ ์๋ ์ ๊ทผ์ฑ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ARIA ์์ฑ์ ์ฌ์ฉํ๋ ๊ฒ์ ํผํด์ผ ํฉ๋๋ค. ์๋ฅผ ๋ค์ด, ARIA ์ญํ ๊ณผ ์์ฑ์ ์ฌ์ฉํ์ฌ ์ฌ์ฉ์ ์ ์ ์์ ฏ์ ์ ์ํ๊ณ ์ฝํ ์ธ ๊ฐ ๋์ ์ผ๋ก ๋ณ๊ฒฝ๋ ๋ ์คํฌ๋ฆฐ ๋ฆฌ๋์ ์ํ ์ ๋ฐ์ดํธ๋ฅผ ์ ๊ณตํ์ธ์.
6. ๋ฐ์ํ ๋์์ธ๊ณผ ์ ๊ทผ์ฑ
์น์ฌ์ดํธ๊ฐ ๋ฐ์ํ์ด๋ฉฐ ๋ค์ํ ํ๋ฉด ํฌ๊ธฐ์ ๊ธฐ๊ธฐ์ ์ ์ํ๋๋ก ํ์ธ์. ์ด๋ ๋ชจ๋ฐ์ผ ๊ธฐ๊ธฐ๋ ํ๋ธ๋ฆฟ์์ ๋ณด์กฐ ๊ธฐ์ ์ ์ฌ์ฉํ๋ ์ฅ์ ๊ฐ ์๋ ์ฌ์ฉ์์๊ฒ ๋งค์ฐ ์ค์ํฉ๋๋ค. CSS ๋ฏธ๋์ด ์ฟผ๋ฆฌ๋ฅผ ์ฌ์ฉํ์ฌ ํ๋ฉด ํฌ๊ธฐ์ ๋ฐฉํฅ์ ๋ฐ๋ผ ์ฝํ ์ธ ์ ๋ ์ด์์๊ณผ ํํ์ ์กฐ์ ํ์ธ์.
์์:
@media (max-width: 768px) {
nav ul {
flex-direction: column; /* ์์ ํ๋ฉด์์ ๋ด๋น๊ฒ์ด์
ํญ๋ชฉ์ ์์ง์ผ๋ก ์์ */
}
}
์ด CSS ์ฝ๋๋ ๋ฏธ๋์ด ์ฟผ๋ฆฌ๋ฅผ ์ฌ์ฉํ์ฌ ์์ ํ๋ฉด์์ ๋ด๋น๊ฒ์ด์ ํญ๋ชฉ์ ๋ฐฉํฅ์ ์์ง์ผ๋ก ๋ณ๊ฒฝํ์ฌ ๋ชจ๋ฐ์ผ ๊ธฐ๊ธฐ์์ ํ์์ ๋ ์ฝ๊ฒ ๋ง๋ญ๋๋ค.
7. ์ ๋๋ฉ์ด์ ๊ณผ ์์ง์
๊ณผ๋ํ๊ฑฐ๋ ์๋ชป ๊ตฌํ๋ ์ ๋๋ฉ์ด์
์ ์ผ๋ถ ์ฌ์ฉ์์๊ฒ ๋ฐ์์ด๋ ๋ฉ๋ฏธ๋ฅผ ์ ๋ฐํ ์ ์์ต๋๋ค. ์์ง์ ๊ฐ์๋ฅผ ์ ํธํ๋ ์ฌ์ฉ์๋ฅผ ์ํด CSS๋ฅผ ์ฌ์ฉํ์ฌ ์ ๋๋ฉ์ด์
์ ์ค์ด๊ฑฐ๋ ๋นํ์ฑํํ์ธ์. prefers-reduced-motion
๋ฏธ๋์ด ์ฟผ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ฉด ์ฌ์ฉ์๊ฐ ์์คํ
์์ ์ฌ์ฉํ๋ ์ ๋๋ฉ์ด์
์ด๋ ์์ง์์ ์์ ์ต์ํํ๋๋ก ์์ฒญํ๋์ง ๊ฐ์งํ ์ ์์ต๋๋ค.
์์:
@media (prefers-reduced-motion: reduce) {
.animated-element {
animation: none !important;
transition: none !important;
}
}
์ด CSS ์ฝ๋๋ ์ด์ ์ฒด์ ์์ '์์ง์ ๊ฐ์' ์ค์ ์ ํ์ฑํํ ์ฌ์ฉ์๋ฅผ ์ํด ์ ๋๋ฉ์ด์ ๊ณผ ํธ๋์ง์ ์ ๋นํ์ฑํํฉ๋๋ค. ์ฌ์ฉ์๊ฐ ์น์ฌ์ดํธ์์ ์๋์ผ๋ก ์ ๋๋ฉ์ด์ ์ ๋นํ์ฑํํ ์ ์๋ ์ปจํธ๋กค์ ์ ๊ณตํ๋ ๊ฒ์ ๊ณ ๋ คํด ๋ณด์ธ์.
8. ๋ณด์กฐ ๊ธฐ์ ๋ก ํ ์คํธํ๊ธฐ
์น์ฌ์ดํธ์ ์ ๊ทผ์ฑ์ ๋ณด์ฅํ๋ ๊ฐ์ฅ ํจ๊ณผ์ ์ธ ๋ฐฉ๋ฒ์ ์คํฌ๋ฆฐ ๋ฆฌ๋, ํ๋ฉด ๋๋ณด๊ธฐ, ์์ฑ ์ธ์ ์ํํธ์จ์ด์ ๊ฐ์ ๋ณด์กฐ ๊ธฐ์ ๋ก ํ ์คํธํ๋ ๊ฒ์ ๋๋ค. ๋ค์ํ ๋ณด์กฐ ๊ธฐ์ ์ ์ฌ์ฉํ์ฌ ์น์ฌ์ดํธ์ ์ ๊ทผ์ฑ์ ๋ํ ํฌ๊ด์ ์ธ ์ดํด๋ฅผ ์ป์ผ์ธ์.
์ฃผ์ ์คํฌ๋ฆฐ ๋ฆฌ๋:
- NVDA (NonVisual Desktop Access): Windows์ฉ ๋ฌด๋ฃ ์คํ์์ค ์คํฌ๋ฆฐ ๋ฆฌ๋์ ๋๋ค.
- JAWS (Job Access With Speech): Windows์ฉ ์ธ๊ธฐ ์์ฉ ์คํฌ๋ฆฐ ๋ฆฌ๋์ ๋๋ค.
- VoiceOver: macOS ๋ฐ iOS์ ๋ด์ฅ๋ ์คํฌ๋ฆฐ ๋ฆฌ๋์ ๋๋ค.
์ถ๊ฐ ํ ์คํธ ํ:
- ํค๋ณด๋ ํ์: ๋ชจ๋ ์ํธ์์ฉ ์์๊ฐ ํค๋ณด๋๋ฅผ ์ฌ์ฉํ์ฌ ์ ๊ทผ ๊ฐ๋ฅํ์ง, ํฌ์ปค์ค ์์๊ฐ ๋ ผ๋ฆฌ์ ์ธ์ง ํ ์คํธํ์ธ์.
- ์์ ์ ๊ทผ์ฑ: ์์ ํ๋์ ์ฌ๋ฐ๋ฅด๊ฒ ๋ ์ด๋ธ์ด ์ง์ ๋์๋์ง, ์ค๋ฅ ๋ฉ์์ง๊ฐ ๋ช ํํ๊ณ ์ดํดํ๊ธฐ ์ฌ์ด์ง ํ์ธํ์ธ์.
- ์ด๋ฏธ์ง ๋์ฒด ํ ์คํธ: ๋ชจ๋ ์ด๋ฏธ์ง์ ์ด๋ฏธ์ง์ ๋ด์ฉ๊ณผ ๊ธฐ๋ฅ์ ์ ํํ๊ฒ ์ ๋ฌํ๋ ์ค๋ช ์ ์ธ ๋์ฒด ํ ์คํธ๊ฐ ์๋์ง ํ์ธํ์ธ์.
- ๋์ ์ฝํ ์ธ : ๋์ ์ฝํ ์ธ ์ ๋ฐ์ดํธ๊ฐ ์คํฌ๋ฆฐ ๋ฆฌ๋์ ์ ๋๋ก ์๋ ค์ง๋์ง ํ ์คํธํ์ธ์.
์ ๊ทผ์ฑ์ ์ํ ๊ณ ๊ธ CSS ๊ธฐ์
1. ํ ๋ง ์ค์ ์ ์ํ ์ฌ์ฉ์ ์ ์ ์์ฑ(CSS ๋ณ์)
CSS ์ฌ์ฉ์ ์ ์ ์์ฑ(๋ณ์)์ ์ฌ์ฉํ์ฌ ๊ณ ๋๋น ์ต์ ์ด ์๋ ์ ๊ทผ์ฑ ๋์ ํ ๋ง๋ฅผ ๋ง๋์ธ์. ์ด๋ฅผ ํตํด ์ฌ์ฉ์๋ ์์ ์ ๊ฐ๋ณ ์๊ตฌ์ ๋ง๊ฒ ์น์ฌ์ดํธ์ ๋ชจ์์ ์ฌ์ฉ์ ์ ์ํ ์ ์์ต๋๋ค.
์์:
:root {
--text-color: #333;
--background-color: #fff;
--link-color: #007bff;
}
body {
color: var(--text-color);
background-color: var(--background-color);
}
a {
color: var(--link-color);
}
/* ๊ณ ๋๋น ํ
๋ง */
.high-contrast {
--text-color: #fff;
--background-color: #000;
--link-color: #ff0;
}
์ด ์์๋ ํ
์คํธ ์์, ๋ฐฐ๊ฒฝ์, ๋งํฌ ์์์ ๋ํ CSS ์ฌ์ฉ์ ์ ์ ์์ฑ์ ์ ์ํฉ๋๋ค. .high-contrast
ํด๋์ค๋ ์ด๋ฌํ ๋ณ์๋ฅผ ์ฌ์ ์ํ์ฌ ๊ณ ๋๋น ํ
๋ง๋ฅผ ๋ง๋ญ๋๋ค. ๊ทธ๋ฐ ๋ค์ JavaScript๋ฅผ ์ฌ์ฉํ์ฌ <body>
์์์ .high-contrast
ํด๋์ค๋ฅผ ํ ๊ธํ์ฌ ํ
๋ง๋ฅผ ์ ํํ ์ ์์ต๋๋ค.
2. ์ ๊ทผ์ฑ ์๋ ๋ ์ด์์์ ์ํ CSS Grid์ Flexbox
CSS Grid์ Flexbox๋ ์ ๊ทผ์ฑ ์๊ณ ๋ฐ์ํ์ธ ๋ ์ด์์์ ๋ง๋๋ ๋ฐ ์ฌ์ฉํ ์ ์๋ ๊ฐ๋ ฅํ ๋ ์ด์์ ๋๊ตฌ์ ๋๋ค. ๊ทธ๋ฌ๋ ์์์ ์๊ฐ์ ์์๊ฐ DOM ์์์ ์ผ์นํ๋๋ก ์ ์คํ๊ฒ ์ฌ์ฉํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค.
์์:
Flexbox๋ Grid๋ฅผ ์ฌ์ฉํ ๋ ํญ ์์๊ฐ ๋
ผ๋ฆฌ์ ์ผ๋ก ์ ์ง๋๋๋ก ํ์ธ์. order
์์ฑ์ ์ ์คํ๊ฒ ์ฌ์ฉํ์ง ์์ผ๋ฉด ํญ ์์๋ฅผ ๋ฐฉํดํ ์ ์์ต๋๋ค.
3. `clip-path`์ ์ ๊ทผ์ฑ
`clip-path` ์์ฑ์ ์๊ฐ์ ์ผ๋ก ํฅ๋ฏธ๋ก์ด ๋ชจ์๊ณผ ํจ๊ณผ๋ฅผ ๋ง๋๋ ๋ฐ ์ฌ์ฉ๋ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ `clip-path`๋ฅผ ์ฌ์ฉํ ๋๋ ์ฃผ์ํด์ผ ํฉ๋๋ค. ๋๋ก๋ ์ฝํ ์ธ ๋ฅผ ๊ฐ๋ฆฌ๊ฑฐ๋ ์ํธ ์์ฉํ๊ธฐ ์ด๋ ต๊ฒ ๋ง๋ค ์ ์๊ธฐ ๋๋ฌธ์ ๋๋ค. ์๋ฆฐ ์ฝํ ์ธ ๊ฐ ์ ๊ทผ ๊ฐ๋ฅํ๊ฒ ์ ์ง๋๊ณ , ํด๋ฆฌํ์ด ํค๋ณด๋ ํ์์ด๋ ์คํฌ๋ฆฐ ๋ฆฌ๋ ์ ๊ทผ์ ๋ฐฉํดํ์ง ์๋๋ก ํ์ธ์.
4. `content` ์์ฑ๊ณผ ์ ๊ทผ์ฑ
CSS์ `content` ์์ฑ์ ์์ ์์ด๋ ๋ค์ ์์ฑ๋ ์ฝํ ์ธ ๋ฅผ ์ฝ์ ํ๋ ๋ฐ ์ฌ์ฉํ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ์์ฑ๋ ์ฝํ ์ธ ๊ฐ ํญ์ ์คํฌ๋ฆฐ ๋ฆฌ๋์ ์ ๊ทผ ๊ฐ๋ฅํ ๊ฒ์ ์๋๋๋ค. `content` ์์ฑ์ ์ ์คํ๊ฒ ์ฌ์ฉํ๊ณ , ๋ณด์กฐ ๊ธฐ์ ์ ์ถ๊ฐ์ ์ธ ์๋งจํฑ ์ ๋ณด๋ฅผ ์ ๊ณตํ๊ธฐ ์ํด ARIA ์์ฑ์ ์ฌ์ฉํ๋ ๊ฒ์ ๊ณ ๋ คํ์ธ์.
์ค์ ์ฌ๋ก ๋ฐ ์ผ์ด์ค ์คํฐ๋
์ด๋ฌํ ์์น์ด ๋ค์ํ ์ง์ญ๊ณผ ์ํฉ์์ ์ด๋ป๊ฒ ์ ์ฉ๋๋์ง ๋ณด์ฌ์ฃผ๋ ๋ช ๊ฐ์ง ์ค์ ์ฌ๋ก๋ฅผ ์ดํด๋ณด๊ฒ ์ต๋๋ค.
- ์ ๋ถ ์น์ฌ์ดํธ: ์๊ตญ, ์บ๋๋ค, ํธ์ฃผ๋ฅผ ํฌํจํ ๋ง์ ๊ตญ๊ฐ์์๋ ์ ๋ถ ์น์ฌ์ดํธ์ ๋ํ ์๊ฒฉํ ์ ๊ทผ์ฑ ๊ฐ์ด๋๋ผ์ธ์ ๊ฐ์ง๊ณ ์์ต๋๋ค. ์ด๋ฌํ ์น์ฌ์ดํธ๋ ์ข ์ข WCAG ์ค์์ ๋ชจ๋ฒ ์ฌ๋ก๋ก, ์๋งจํฑ HTML, ์์ ๋๋น, ํค๋ณด๋ ํ์์ ๋ชจ๋ฒ ์ฌ๋ก๋ฅผ ๋ณด์ฌ์ค๋๋ค.
- ์ ์ ์๊ฑฐ๋ ํ๋ซํผ: ์๋ง์กด์ด๋ ์๋ฆฌ๋ฐ๋ฐ์ ๊ฐ์ ๊ธ๋ก๋ฒ ์ ์ ์๊ฑฐ๋ ๊ฑฐ๋ ๊ธฐ์ ๋ค์ ๋ ๋์ ๊ณ ๊ฐ์ธต์ ๋๋ฌํ๊ธฐ ์ํด ์ ๊ทผ์ฑ์ ๋ง์ ํฌ์๋ฅผ ํฉ๋๋ค. ์ด๋ค์ ์ข ์ข ์ด๋ฏธ์ง ๋์ฒด ํ ์คํธ, ์ ํ ๊ฒ์์ ์ํ ํค๋ณด๋ ํ์, ๊ฐ๋ ์ฑ ํฅ์์ ์ํ ๊ธ๊ผด ํฌ๊ธฐ ์กฐ์ ๊ณผ ๊ฐ์ ๊ธฐ๋ฅ์ ๊ตฌํํฉ๋๋ค.
- ๊ต์ก ๊ธฐ๊ด: ์ ์ธ๊ณ์ ๋ํ๋ค์ ์ ๊ทผ์ฑ ์๋ ์จ๋ผ์ธ ํ์ต ํ๊ฒฝ์ ๋ง๋๋ ๋ฐ ์ ์ ๋ ์ง์คํ๊ณ ์์ต๋๋ค. ์ด๋ค์ ์ข ์ข ์ฅ์ ํ์๋ค์ ์ํด ๋น๋์ค ์คํฌ๋ฆฝํธ, ์ค๋์ค ์ฝํ ์ธ ์๋ง, ์ ๊ทผ ๊ฐ๋ฅํ ๋ฒ์ ์ ๊ฐ์ ์๋ฃ๋ฅผ ์ ๊ณตํฉ๋๋ค.
ํผํด์ผ ํ ์ผ๋ฐ์ ์ธ ์ ๊ทผ์ฑ ์ค์
- ๋ถ์ถฉ๋ถํ ์์ ๋๋น: ์ ์๋ ฅ ์ฌ์ฉ์๊ฐ ์ฝ๊ธฐ ์ด๋ ค์ด ์์ ์กฐํฉ์ ์ฌ์ฉํ๋ ๊ฒ.
- ์ด๋ฏธ์ง ๋์ฒด ํ ์คํธ ๋๋ฝ: ์ด๋ฏธ์ง์ ์ค๋ช ์ ์ธ ๋์ฒด ํ ์คํธ๋ฅผ ์ ๊ณตํ์ง ์์ ์คํฌ๋ฆฐ ๋ฆฌ๋ ์ฌ์ฉ์๊ฐ ์ ๊ทผํ ์ ์๊ฒ ๋ง๋๋ ๊ฒ.
- ๋ฏธํกํ ํค๋ณด๋ ํ์: ํค๋ณด๋๋ฅผ ์ฌ์ฉํ์ฌ ํ์ํ๊ธฐ ์ด๋ ต๊ฑฐ๋ ๋ถ๊ฐ๋ฅํ ์น์ฌ์ดํธ๋ฅผ ๋ง๋๋ ๊ฒ.
- ๋ ์ด์์์ ํ ์ฌ์ฉ: ์๋งจํฑ HTML ์์ ๋์ ๋ ์ด์์ ๋ชฉ์ ์ผ๋ก HTML ํ๋ฅผ ์ฌ์ฉํ๋ ๊ฒ.
- ํฌ์ปค์ค ํ์์ ๋ฌด์: ์๊ฐ์ ํฌ์ปค์ค ํ์์๋ฅผ ์ ๊ฑฐํ๊ฑฐ๋ ๊ฐ๋ ค์ ํค๋ณด๋ ์ฌ์ฉ์๊ฐ ์ด๋ค ์์์ ํฌ์ปค์ค๊ฐ ์๋์ง ์๊ธฐ ์ด๋ ต๊ฒ ๋ง๋๋ ๊ฒ.
- ์ ๋ณด ์ ๋ฌ์ ์์๋ง ์์กด: ์ ๋ณด๋ฅผ ์ ๋ฌํ๋ ์ ์ผํ ์๋จ์ผ๋ก ์์์ ์ฌ์ฉํ์ฌ ์๋งน ์ฌ์ฉ์๊ฐ ์ ๊ทผํ ์ ์๊ฒ ๋ง๋๋ ๊ฒ.
- ๋ณด์กฐ ๊ธฐ์ ๋ก ํ ์คํธํ์ง ์์: ์คํฌ๋ฆฐ ๋ฆฌ๋์ ๊ฐ์ ๋ณด์กฐ ๊ธฐ์ ๋ก ์น์ฌ์ดํธ๋ฅผ ํ ์คํธํ์ง ์์ ์ ๊ทผ์ฑ ๋ฌธ์ ๋ฅผ ์๋ณํ๊ณ ์์ ํ์ง ๋ชปํ๋ ๊ฒ.
๊ฒฐ๋ก : ๋ ๋์ ์น์ ์ํด ์ ๊ทผ์ฑ ์์ฉํ๊ธฐ
์ ๊ทผ์ฑ์ ๋จ์ํ ๊ธฐ์ ์ ์๊ตฌ์ฌํญ์ด ์๋๋ผ, ๋ชจ๋์๊ฒ ํฌ์ฉ์ ์ด๊ณ ์ ๊ทผ ๊ฐ๋ฅํ ์น์ ๋ง๋๋ ๊ทผ๋ณธ์ ์ธ ์ธก๋ฉด์ ๋๋ค. ์ด๋ฌํ CSS ๊ธฐ์ ์ ๊ตฌํํ๊ณ WCAG ๊ฐ์ด๋๋ผ์ธ์ ์ค์ํจ์ผ๋ก์จ, ์๊ฐ์ ์ผ๋ก ๋งค๋ ฅ์ ์ผ ๋ฟ๋ง ์๋๋ผ ๋ชจ๋ ์ฌ์ฉ์๊ฐ ์์ ์ ๋ฅ๋ ฅ์ ๊ด๊ณ์์ด ์ฌ์ฉํ๊ณ ์ฆ๊ธธ ์ ์๋ ์น์ฌ์ดํธ๋ฅผ ๋ง๋ค ์ ์์ต๋๋ค. ์น ๊ฐ๋ฐ ๊ณผ์ ์ ํ์์ ์ธ ๋ถ๋ถ์ผ๋ก ์ ๊ทผ์ฑ์ ๋ฐ์๋ค์ด๋ฉด, ๋ ํฌ์ฉ์ ์ด๊ณ ๊ณตํํ ๋์งํธ ์ธ์์ ๋ง๋๋ ๋ฐ ๊ธฐ์ฌํ๊ฒ ๋ ๊ฒ์ ๋๋ค.
์ฐธ๊ณ ์๋ฃ ๋ฐ ์ถ๊ฐ ์ ๋ณด
- ์น ์ฝํ ์ธ ์ ๊ทผ์ฑ ๊ฐ์ด๋๋ผ์ธ (WCAG): https://www.w3.org/WAI/standards-guidelines/wcag/
- ์น ์ ๊ทผ์ฑ ์ด๋์ ํฐ๋ธ (WAI): https://www.w3.org/WAI/
- WebAIM: https://webaim.org/
- Deque University: https://dequeuniversity.com/