์น ์คํ์ผ๋ง์ ํ ๋ '์ด๋ค ์์๋ฅผ ๊ธฐ์ค์ผ๋ก ๋ค๋ฅธ ์์๋ฅผ ์ ํํ ๊น' ํ๋ ๋ฌธ์ ๋ ์์ฃผ ์์ฃผ ๋ง์ฃผํฉ๋๋ค. ์ด๋ฒ ๊ธ์์๋ ์ธ์ ํ์ ๊ฒฐํฉ์(+), ์ผ๋ฐ ํ์ ๊ฒฐํฉ์(~) ๋ฅผ ์ค์ฌ์ผ๋ก, ๊ด๋ จ๋ ์ ํ์๋ค์ ์์์ ํจ๊ป ์ ๋ฆฌํด์ ํฐ์คํ ๋ฆฌ ๋ธ๋ก๊ทธ์ ๋ฐ๋ก ์ฌ๋ฆด ์ ์๊ฒ ์์ฑํ์ต๋๋ค. ์ฝ๋ ์์์ ์์ฃผ ์ฐ์ด๋ ํจํด, ์ค์ ํ๊น์ง ๋ด์์ผ๋ ๋ณต์ฌํด์ ๋ฐ๋ก ์ฌ์ฉํ์ธ์.
์ธ์ ํ์ (+), ์ผ๋ฐ ํ์ (~), ์์(>), ํ์(์คํ์ด์ค) ์ ํ์ ์ฐจ์ด์ ์์ ์ ๋ฆฌ. ์ค๋ฌด์์ ์์ฃผ ์ฐ์ด๋ ํจํด๊ณผ ์ฃผ์์ฌํญ๊น์ง ํ ๋ฒ์.
1) ๊ฐ์ — ์ ํ์(Combinators)๋?
CSS ๊ฒฐํฉ์(combinator)๋ ๋ ๊ฐ ์ด์์ ์ ํ์ ์ฌ์ด์ ๊ด๊ณ๋ฅผ ํํํฉ๋๋ค. ์๋ฅผ ๋ค์ด ‘์ด๋ค ์์์ ๋ฐ๋ก ๋ค์ ํ์ ’๋ผ๊ฑฐ๋ ‘์ด๋ค ์์์ ์์’ ๊ฐ์ ๊ด๊ณ๋ฅผ ์ ํํ ๋ ์๋๋ค.
๋ํ์ ์ธ ๊ฒฐํฉ์๋ค :
๊ณต๋ฐฑ( ) — ํ์ ์ ํ์(descendant)
> — ์์ ์ ํ์(child)
+ — ์ธ์ ํ์ ๊ฒฐํฉ์(adjacent sibling)
~ — ์ผ๋ฐ ํ์ ๊ฒฐํฉ์(general sibling)
์ด๋ฒ ๊ธ์ ํนํ +์ ~์ ์ด์ ์ ๋ง์ถ๊ณ , ๊ด๋ จ ์ ํ์๋ค๊ณผ ์ฐจ์ด๋ฅผ ๋น๊ตํฉ๋๋ค.
2) ์ธ์ ํ์ ๊ฒฐํฉ์ +
์ ์: ๊ฐ์ ๋ถ๋ชจ๋ฅผ ๊ฐ์ง๋ ํ์ ์์ ์ค ๋ฐ๋ก ๋ค์์ ์ค๋ ์์๋ง ์ ํํฉ๋๋ค.
<h2>์ ๋ชฉ</h2>
<p>์ฒซ ๋ฒ์งธ ๋จ๋ฝ</p>
<p>๋ ๋ฒ์งธ ๋จ๋ฝ</p>
<style>
h2 + p {
margin-top: 0.5rem;
color: #2b6cb0;
}
</style>
์ ์์ ์์ h2 + p๋ h2 ๋ฐ๋ก ๋ค์์ ๋์ค๋ p ํ๋๋ง ๋์์ผ๋ก ์คํ์ผ์ด ์ ์ฉ๋ฉ๋๋ค. ์ฒซ ๋ฒ์งธ ๋จ๋ฝ์ ์ ์ฉ๋ฉ๋๋ค.
์ค์ ์ฌ์ฉ ์ฌ๋ก
- ์ ๋ชฉ ๋ฐ๋ก ๋ค์ ๋จ๋ฝ์๋ง ์ฌ๋ฐฑ์ด๋ ํฐํธ ์คํ์ผ์ ์ฃผ๊ณ ์ถ์ ๋
- ๋ชฉ๋ก ์์ด์ฝ ๋ฐ๋ก ๋ค์์ ์ค๋ ์ค๋ช ์๋ง ์คํ์ผ์ ์ ์ฉํ ๋
์ฃผ์์ฌํญ
๋ฐ๋ก ์(๋ฐ๋ก ๋ค์) ํ์ ๋ง ์ ํํ๋ฏ๋ก, h2์ p ์ฌ์ด์ ๋ค๋ฅธ ์์๊ฐ ๋ผ์ด๋ค๋ฉด ์ ์ฉ๋์ง ์์ต๋๋ค.
3) ์ผ๋ฐ ํ์ ๊ฒฐํฉ์ ~
์ ์: ๊ฐ์ ๋ถ๋ชจ๋ฅผ ๊ฐ์ง๋ ํ์ ์์๋ค ์ค ์ ํ ์ ํ์ ์ดํ์ ๋ฑ์ฅํ๋ ๋ชจ๋ ํ์ ์์๋ค์ ๋ชจ๋ ์ ํํฉ๋๋ค(๋จ, ์์๋ ์ค์ — ์์ ์์ด๋ ์ ํ๋์ง ์์).
<h3>์์ ๋ชฉ</h3>
<p>๋ด์ฉ A</p>
<div>์ค๊ฐ ๋ฐ์ค</div>
<p>๋ด์ฉ B</p>
<style>
h3 ~ p {
color: #d53f8c;
}
</style>
์ ์์ ์์ h3 ~ p๋ ๋ด์ฉ A์ ๋ด์ฉ B ๋ ๋ค ์ ํํฉ๋๋ค. h3 ์ดํ์ ๋ํ๋๋ ๋ชจ๋ p๊ฐ ๋์์ ๋๋ค.
์ค์ ์ฌ์ฉ ์ฌ๋ก
- ๊ฒฝ๊ณ ๋ฉ์์ง ์ดํ ํ์ด์ง์์ ํน์ ํ์ ์ ์์๋ค ์ ์ฒด์ ์คํ์ผ์ ์ฃผ๊ณ ์ถ์ ๋
- ํ ๊ธ ๋ฒํผ ์ดํ ๋ชจ๋ ํ์ ์์๋ค์ ์ํ๋ฅผ ๋ฐ๊พธ๊ณ ์ถ์ ๋
์ฃผ์์ฌํญ
- ์ ํ์๋ ์→๋ค ๊ด๊ณ๋ง ์ธ์ํฉ๋๋ค. p ~ h3๋ h3 ์์ ์๋ p๋ฅผ ์ ํํ์ง ์์ต๋๋ค.
4) ๊ด๋ จ ์ ํ์์ ๋น๊ต
ํ์ ์ ํ์(๊ณต๋ฐฑ): nav a — nav ๋ด๋ถ์ ๋ชจ๋ a (๊น์ด์ ์๊ด ์์)
์์ ์ ํ์(>): ul > li — ul์ ์ง๊ณ ์์์ธ li๋ง
์ธ์ ํ์ (+): h2 + p — h2 ๋ฐ๋ก ๋ค์ ํ์ p ํ๋
์ผ๋ฐ ํ์ (~): h2 ~ p — h2 ๋ค์์ ๋์ค๋ ๋ชจ๋ ํ์ p
5) ์ค์ ์์ : FAQ ์คํ์ผ ์ปดํฌ๋ํธ
<button class="q">์ง๋ฌธ 1</button>
<div class="a">๋ต๋ณ 1</div>
<button class="q">์ง๋ฌธ 2</button>
<div class="a">๋ต๋ณ 2</div>
<style>
.q + .a { display: none; }
.q:focus + .a,
.q[aria-expanded="true"] + .a { display: block; }
</style>
๋ฒํผ ๋ฐ๋ก ๋ค์์ ์ค๋ ๋ต๋ณ๋ง ๋ณด์ด๊ฒ ํ ๋ +๋ฅผ ์ฌ์ฉํ๋ฉด HTML ๊ตฌ์กฐ๋ง์ผ๋ก ๊ฐ๋จํ ํ ๊ธ UI๋ฅผ ๊ตฌํํ ์ ์์ต๋๋ค.
6) ์์ฃผ ํ๋ ์ค์ & ํ
- ํ์ ๊ฐ ์๋ ๊ฒฝ์ฐ: ๋ถ๋ชจ๊ฐ ๋ค๋ฅด๋ฉด ~๋ +๋ก ์ ํ๋์ง ์์ต๋๋ค. (๋ฐ๋์ ๊ฐ์ ๋ถ๋ชจ์ฌ์ผ ํจ)
- ๊ณต๋ฐฑ/๊ฐํ์ด ํท๊ฐ๋ฆด ๋: HTML์์ ๊ณต๋ฐฑ/์ค๋ฐ๊ฟ์ ์์ ๊ฐ ํ ์คํธ ๋ ธ๋๋ก ๋จ์ง๋ง, CSS ์ ํ์ ๊ด๊ณ์๋ ์ํฅ์ ์ฃผ์ง ์์ต๋๋ค. ๋จ, ๋ค๋ฅธ ์์๊ฐ ์ฌ์ด์ ์๋ค๋ฉด +๋ ์ ์ฉ๋์ง ์์ต๋๋ค.
- ์ ๊ทผ์ฑ: ์๊ฐ์ ์ผ๋ก ํ ๊ธ์ ๊ตฌํํ ๋๋ aria-expanded ๊ฐ์ ์์ฑ์ ํจ๊ป ์ฌ์ฉํ๋ฉด ์คํฌ๋ฆฐ๋ฆฌ๋ ํธํ์ฑ์ด ์ข์์ง๋๋ค.
7) ๋ธ๋ผ์ฐ์ ํธํ์ฑ(๊ฐ๋จํ)
+์ ~๋ ์ค๋์ ๋ถํฐ ์ง์๋์ด ๋๋ถ๋ถ์ ๋ธ๋ผ์ฐ์ ์์ ๋ฌธ์ ์์ด ๋์ํฉ๋๋ค.
(IE9 ์ด์์์ ์์ ์ ์ผ๋ก ๋์) — ์ค์ ํ๋ก์ ํธ์์ ๊ตฌ์ฒด์ ์ธ ๋ฒ์ ์ด ํ์ํ๋ฉด ๋ธ๋ผ์ฐ์ ๋ณ ํธํ์ฑ ํ๋ฅผ ์ถ๊ฐํ์ธ์.
8) ๋ง๋ฌด๋ฆฌ — ์ธ์ ์ด๋ค ๊ฑธ ์จ์ผ ํ ๊น?
- ์ ๋ชฉ ๋ฐ๋ก ๋ค์ ์์ ํ๋๋ง ์คํ์ผ์ ์ฃผ๊ณ ์ถ๋ค๋ฉด +.
- ํน์ ์์ ์ดํ์ ๊ฐ์ ํ์ ์ ์ฒด์ ์คํ์ผ์ ์ฃผ๊ณ ์ถ๋ค๋ฉด ~.
- **๊ตฌ์กฐ์ ๊ด๊ณ(์์/ํ์)**๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ ํํ๋ ค๋ฉด >๋ ๊ณต๋ฐฑ์ ์ฌ์ฉ.
์๋ฆฌ๋ง ์๋ฉด HTML ๊ตฌ์กฐ๋ง ๋ณ๊ฒฝํด์ ์ํ๋ ์คํ์ผ์ ์ฝ๊ฒ ์ ์ดํ ์ ์์ต๋๋ค.
์ค๋ฌด์์๋ ์ ๊ทผ์ฑ, ์ ์ง๋ณด์์ฑ, ๊ทธ๋ฆฌ๊ณ HTML์ ์๋ฏธ๋ฅผ ํค์น์ง ์๋ ์ ์์ ์ ํ์๋ฅผ ์ฌ์ฉํ์ธ์.