CSS ์ง์์ ๋ค๋ค์ต์ ์ด๋ค
Published at 2024. 5. 20.
8 min read
Table of Contents
CSS ๊ณต๋ถ์ ์ด๋ ค์
ํ๋ก ํธ์๋ ๊ฐ๋ฐ์ ํ๋ค๋ณด๋ฉด CSS๋ฅผ ๋๋์ฒด ์ด๋๊น์ง ๊ณต๋ถํด์ผ ํ๋๊ฑด์ง ๋ํต ๋ชจ๋ฅด๊ฒ ๋ ์๊ฐ์ด ์จ๋ค.
๊ฐ์ก๊ณ ๊ณต๋ถํ๋ต์๊ณ ์ฑ ์ ์กฐ๊ธ ๊ฒ์ํ๋ค๋ณด๋ฉด 1100 ํ์ด์ง์ ์ด๋ฅด๋ ๋ฌด์๋ฌด์ํ ์ฑ ์ ์๋๋นํด์ ๊ณต๋ถํ ์๋๊ฐ ์๋๊ธฐ๋ ํ๋ค.
๊ทธ๋ ๋ค๊ณ ๊ตฌ๊ธ๋ง์ ํด์ ๋ค์ํ article ์ ํตํด ๊ณต๋ถํด๋ณด๋ ค๊ณ ํ๋ฉด ์ด๋ค๊ฒ ์ค์ํ ๊ฒ์ด๊ณ ๋์๊ฒ ๋์์ด ๋ ๊ฒ์ธ์ง ํ๋จ์ด ์ ๋์ง ์๋๋ค.
๊ฒฐ๊ตญ ๊ทธ๋ ๊ทธ๋ ๋งํ๋ ๋ถ๋ถ๋ง ๋ถ๋ถ์ ์ผ๋ก ๊ณต๋ถ๋ฅผ ํด๋๊ฐ๋ฉด์ ํํธํ๋ ์ง์์ ์ป๊ฒ ๋๋ค.
์ฌ์ค ์ด๋ ๊ฒ ๊ณต๋ถ๋ฅผ ํด ๋๊ฐ๋๊ฒ๋ ๋์์ง๋ ์์ ๋ฐฉ๋ฒ์ด๋ค. ์ด์ฉ๋ฉด ์ ์ผ ํจ์จ์ ์ธ ๋ฐฉ๋ฒ์ด๊ธฐ๋ ํ๋ค.
์๋ํ๋ฉด ๋น์ฅ ํ์ํ์ง ์์ ๋ถ๋ถ๊น์ง ๊ณต๋ถํ๋๋ผ ์๊ฐ์ ์์ง ์์๋ ๋๋๊น.
ํ์ง๋ง ์กฐ๊ธ ์์ผ๋ฅผ ๋ํ์ ๋ฐ๋ผ๋ณด๋ฉด ์ด๋ฐ ๋ฐฉ์์ผ๋ก CSS ์ง์์ ์์๋๊ฐ๋ ๊ฒ์๋ ๋ช
ํํ ํ๊ณ์ ์ด 2๊ฐ์ง ์กด์ฌํ๋ค.
๋ด๊ฐ ์๊ฐํ๋ ๊ทธ๋ฌํ ํ๊ณ์ ์ ๋ค์๊ณผ ๊ฐ๋ค.
- ํํธํ๋ ์ง์ ์ต๋์ผ๋ก ์ธํด CSS ๊ธฐ๋ณธ๊ธฐ๋ฅผ ๋จ๋จํ๊ฒ ์์ง ๋ชปํ๊ฒ ๋ ์ํ์ฑ์ด ์๋ค.
- ๋ ์ฌ์ฉํ๋ CSS ์์ฑ๋ง ๋ชธ์ ์ต์ด์ ์๋ก์ด ์ฌ๊ณ ๋ฅผ ํ๊ธฐ๊ฐ ๊ท์ฐฎ์ ์ง๋ค. ์ด๋ ๋ด๊ฐ ์์ฑํ๋ CSS ์ฝ๋์ ํ์ง์ ๋ฎ์ถ ๊ฐ๋ฅ์ฑ์ด ์๋ค.
๊ฐ ํญ๋ชฉ์ ๊ดํด ์กฐ๊ธ ๋ ์์ ํด๋ณด๊ฒ ๋ค.
์ฐ์ 1๋ฒ.
๋๋ (๊ฑฐ์)ํญ์ task ์ ์น์ด๋ ์ค๋ฌด์์ด๊ธฐ์ CSS ๊ด๋ จํ์ฌ ๋ฆฌ์์น๋ฅผ ํ ๋์๋ ํ์ํ ๋ถ๋ถ๋ง cherry-picking ํ๋ ๊ฒฝํฅ์ด ์๋ค.
๊ทธ๋ฌ๋ค๋ณด๋ฉด MDN์ ์จ ์๋ ์ฅํฉํ spec ๊ด๋ จ ๋ด์ฉ์ ์์ธํ ์ฝ์ด๋ณด์ง ์๊ฒ ๋๋ ๊ฒฝ์ฐ๋ ๋ง๋ค. ์ด๋ฐ ๋ฐฉ์์ผ๋ก CSS ์ง์์ ์ต๋ํด ๋๊ฐ๊ฒ ๋๋ฉด, ๊ฒฐ๊ตญ ํด๋น ์ง์์ ์จ์ ํ ๋ด ๊ฒ์ผ๋ก ๋ง๋ค์ง ๋ชปํ๊ฒ ๋ ๊ฐ๋ฅ์ฑ์ด ๋๋ค. ๋ฐ์ชฝ์ง๋ฆฌ ์ง์์ด ๋๋ ์ ์ด๋ค.
๊ฒฐ๊ตญ ๋ฐ์ชฝ์ง๋ฆฌ CSS ์ง์๋ค์ด ์ฒด๊ณ์์ด ๋ชจ์ฌ์ ํ์ง์ด ๋จ์ด์ง๋ CSS ์ฝ๋๋ฅผ ์์ฐํ๊ฒ ๋๋ ๊ฒ์ด๋ค.
๋ค์ meme ์์์ฒ๋ผ ์ ๋๋ก ๋์๊ฐ ๋ ๊น์ง ๋์๋ CSS ๋์ง์ ํ๊ฒ ๋๊ธฐ๋ํ๊ณ ..
๋ค์์ผ๋ก 2๋ฒ.
์ธ๊ฐ์ ํจํด์ ์ธ์ํ๊ณ ํ์ฑํ๋๋ฐ์ ๋ฅํ ์๋ฌผ์ด๊ธฐ์ ๋ณธ์ธ์๊ฒ ์ต์ํ ๋ฐฉ์์ผ๋ก ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ณ ์ ํ๋ ๋ณธ๋ฅ(?)์ด ์๋๊ฒ ๊ฐ๋ค.
๋ด๊ฐ ์๋ CSS ์์ฑ๋ง ๊ฐ์ง๊ณ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ค๋ ํธํฅ์ด ์๊ธธ ์ ์๋ค๋ ๋ป์ด๋ค. ๋ญ, ๋ฌธ์ ํด๊ฒฐ ๋ฐฉ์์ด ๊ผญ ๋ค์ฑ๋ก์์ผ ํ๋ ๊ฒ์ ์๋๋ ์ด ๋ถ๋ถ์ ๋ณ ๋ฌธ์ ๊ฐ ๋์ง ์์ ์ ์๋ค.
ํ์ง๋ง ์ง์ง ๋ฌธ์ ๋, CSS๋ฅผ ์ ๋ชจ๋ฅด๋ฉด ๋๋ก๋ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ๋ฐฉ์์ด ์๊ฐ ์ธ๋ก ๋ณต์กํด์ง ์ ์๋ค๋ ์ ์ด๋ค.
๋ฌด์จ ์ด์ผ๊ธฐ์ผ๊น?
CSS ์ง์์ ๋ง์ด ์๋๊ฑด ์ ๋ง ๋์์ด ๋๋
๋ค์๊ณผ ๊ฐ์ ๋ฌธ์ ๊ฐ ์๋ค๊ณ ๊ฐ์ ํด๋ณด์.
div.content ์ ์์ ์์๊ฐ ์์ผ๋ฉด ํน์ background-color ๋ฅผ ์ ์ฉํ๊ณ ,
div.content ์ ์์ ์์๊ฐ ํ๋๋ ์์ผ๋ฉด div.wrapper ์์๋ฅผ ์จ๊น์ฒ๋ฆฌํ๋ผ.
์ด๋ค ๋ฐฉ์์ผ๋ก ์ด ๋ฌธ์ ์ ์ ๊ทผํ ๊ฒ์ธ๊ฐ?
์ ์ ์๊ฐ์ ํด๋ณด์.
โฆ
โฆ
โฆ
โฆ
โฆ
โฆ
โฆ
โฆ
โฆ
โฆ
โฆ
โฆ
โฆ
โฆ
โฆ
JS ์ฝ๋๋ฅผ ์ง๋ฉด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์์ ๊ฒ ๊ฐ๋ค.
class ๊ฐ
content
์ธ div element ๋ฅผ ์ป์ด์, child node ๊ฐ ์๋์ง ์๋์ง ์ฒดํฌํ ํ ์๊ตฌ์ฌํญ์ ๋ง๊ฒ inline style ์ ์ ์ฉํ๋ ํด์ ๊ตฌํํด์ฃผ๋ฉด ๋ ๊ฒ ๊ฐ๋ค!
์ฝ๋๋ก ํํํ๋ฉด ์๋ง ๋ค์๊ณผ ๊ฐ์ ๋ชจ์์๊ฐ ๋ ๊ฒ์ด๋ค.
/** JS solution */
const wrapperDiv = document.querySelector('.wrapper')
const contentDiv = wrapperDiv.querySelector('.content')
if (contentDiv.childNodes.length > 0) {
// text node, element ๋ชจ๋ ํฌํจํ์ฌ ์์์ด ํ ๊ฐ ์ด์์ผ ๋,
wrapperDiv.style.backgroundColor = 'tomato'
} else {
// ์์์ด ํ๋๋ ์์ ๋
wrapperDiv.style.display = 'none'
}
์ฝ๋๋ ๊น๋ํ ๊ฒ ๊ฐ๊ณ ์ด ์ ๋๋ฉด ์ ์ง ๋ฏ ์ถ๋ค!
ํ์ง๋ง, ๋ ์ฌ์ด ๋ฐฉ๋ฒ์ ์์๊น? JS๋ฅผ ์์ ์์ฐ๊ณ ํ ์ ์๋ ๋ฐฉ๋ฒ์ ์์๊น?
์๋ค.
๋ค์ CSS ์ฝ๋๋ก ํด๊ฒฐ์ด ๊ฐ๋ฅํ๋ค.
/* :has(), :not(), :empty ์ ์กฐํฉ์ผ๋ก ํด๊ฒฐ */
.wrapper:has(.content:not(:empty)) {
background-color: tomato;
}
.wrapper:has(.content:empty) {
display: none;
}
๋ญ๊ฐ JS๋ก inline style ์ ์ ์ดํ๋ ์ฝ๋๋ณด๋ค ํ๊ฒฐ ๋์์ง ๊ฒ ๊ฐ์ ๋๋์ด ๋ ๋ค!
์์๋ก ๋ ๋ฌธ์ (์ฌ์ค ๋ฌธ์ ๋ฅผ ์ํ ๋ฌธ์ ์ด๊ธด ํ์ง๋ง)์ฒ๋ผ ๋จ์ํ ์ํฉ์ ์ค๋ฌด์์ ์์ฃผ ๋์ค์ง๋ ์์ง๋ง, ์ด์ผ๊ธฐํ๊ณ ์ ํ๋ ๋ฐ๋ ๋ช ํํ ์ ๋ฌ์ด ๋์์๊ฑฐ๋ผ ๋ฏฟ๋๋ค.
โ์๋ ๋งํผ ์ฝ๋ ํ์ง์ด ๋์์ง ์ ์๋ค.โ
๊ฒฐ๋ก
CSS๊ฐ ๊ฐ์ง๊ณ ์๋ ๋ชจ๋ ์์ฑ, ๋ชจ๋ spec ์ ์ ๋ถ ์๊ณ ์๋ ๊ฒ์ ๋ถ๊ฐ๋ฅ์ ๊ฐ๊น๋ค. ๊ทธ๋์ผ ํ ํ์๊ฐ ์๋์ง๋ ์ ๋ชจ๋ฅด๊ฒ ๋ค.
ํ์ง๋ง ํ๋ ํ์คํ ๊ฒ์ CSS ์์ฑ์ ๋ง์ด ์๊ณ ์๋ ๊ฒ์ด ์ค๋ฌด์ ๋์์ด ๋ ๋๊ฐ ๋๋ฌ ์๋ค๋ ๊ฒ์ด๋ค. ๋ชจ๋ฅด๊ณ ์์ ๋์ ์๊ณ ์์ ๋์ ์ฝ๋ ํ๋ฆฌํฐ๊ฐ ๊ฝค๋ ์ฐจ์ด๊ฐ ๋ ์ ์๋ค๋ ๋ง์ด๋ค. ํนํ๋ ์๊ฐ์ ์ผ๋ก ๋นก์ผ ํ๋ฉด(transition, animation ๋ฑ์ ๊ฐ์ข visual effect ๊ฐ ๋ง์ด ๋ค์ด๊ฐ ํ๋ฉด) ์์ ์ ํ ๋์ ๊ทธ๋ ๋ค.
๊ทธ๋ฆฌ๊ณ CSS ๊ฐ๋ ํ๋๋ฅผ ๊ณต๋ถํ๋๋ผ๋ ์ ๋๋ก ๊ณต๋ถํ๋ ๊ฒ์ด ์ค์ํ๋ฉฐ, ํด๋น ๊ฐ๋ ์ ์ค๋ฌด์์ ์ด๋ป๊ฒ ์จ๋จน์ ์ ์์์ง ์๊พธ ๋จธ๋ฆฟ์์ผ๋ก ๊ทธ๋ ค๋ณด๋ฉฐ ํ์ต์ ํ๋ ๊ฒ์ด ํจ์จ์ ์ด๋ค.
๊ทธ๋ ๋ค๋ฉด ๋ง์ง๋ง ์ง๋ฌธ ํ๋๊ฐ ๋จ๋๋ค.
โCSS์ ์ผ๋ง๋ ์๊ฐ ํฌ์ฌ๋ฅผ ํ ๊ฒ์ธ๊ฐ?โ
์ด๊ฑด ์ฌ๋๋ง๋ค ๊ธฐ์ค์ด ๋ค๋ฅผ ์ ์๋ ๋ฌธ์ ์ง๋ง, CSS๋ฅผ hardํ๊ฒ ์ฐ์ง ์๋ ๋ฌธ์ ๋ค์ ํธ๋ ์ฌ๋์ด๋ผ๋ฉด ์ ์ฒด ๊ณต๋ถ ์๊ฐ ์ค 10~20% ์ ๋๋ฉด ์ถฉ๋ถํ ๋ฏ ์ถ๊ณ CSS๋ฅผ hardํ๊ฒ ์ฐ๋ ๋ฌธ์ ๋ค์ ํธ๋ ์ฌ๋์ด๋ผ๋ฉด ๊ทธ ๋น์จ์ 50% ์ด์์ผ๋ก ์ฌ๋ ค์ผ ํ์ง ์์๊น ํ๋ค. ๋ ๋์์ผ ํ ์๋ ์๊ณ ?