3. CSS in JS
keyword
CSS in JS ๋
CSS
1. CSS in JS ๋
CSS-in-JS๋ ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ์ฌ์ฉํ์ฌ ์ปดํฌ๋ํธ์ ์คํ์ผ์ ์ง์ ํ๋ ์คํ์ผ๋ง ๊ธฐ๋ฒ์ด๋ค. ์๋ฐ์คํฌ๋ฆฝํธ ํ์ผ์ด ํ์ฑ๋๋ฉด CSS๊ฐ ์์ฑ๋์ด DOM์ ์ถ๊ฐ๋จ.
Pure CSS
Pure CSS
๊ธ๋ก๋ฒ ๋ค์์คํ์ด์ค ๊ณต์ ํ๋ฏ๋ก ์คํ์ผ ๊ท์น์ด ํ๋ก์ ํธ ์ ์ฒด์ ์ ์ฉ๋์ด ๋ณ๋์ ๋ค์ด๋ฐ ๊ท์น ํ์.
๋์ผํ ํด๋์ค๋ช ์ ์๋ ์ค๋ฒ๋ผ์ด๋ฉ ๋ฐ์์ ํ๋ก์ ํธ์ ๊ท๋ชจ๊ฐ ์ปค์ง์๋ก ํผ๋์ ์ผ๊ธฐํ๋ค.
CSS๊ฐ ๋ถ๋ฆฌ๋์ด ์์ด JS์ ์ํ๊ฐ์ ๊ณต์ ๊ฐ ์ด๋ ค์.
๋ถ๋ชจ ์๋ฆฌ๋จผํธ๋ก ๋ถํฐ ์คํ์ผ ์์๋ฐ์ ์์ ์๋ฆฌ๋จผํธ๊ฐ ์ํฅ์ ๋ฐ์.
์๋ฅผ ๋ค๋ฉด, Main.tsx์์ importํ cssํ์ผ์ด head์๋์ style๋ก ์์ฑ๋๊ธฐ ๋๋ฌธ์ ๋์ผ๋ช ์ ํด๋์ค ๋ค์์ ์ฌ์ฉํ ๊ฒฝ์ฐ App.tsx์์๋ ๋์ผํ๊ฒ ์คํ์ผ์ด ์ ์ฉ๋๋ค.
CSS-in-JS์ ๊ฒฝ์ฐ
CSS-in-JS์ ๊ฒฝ์ฐ
class ๋ค์์ด ๋น๋ ํ์์ด ์ ๋ํฌํ๊ฒ ๋ณ๊ฒฝ๋์ด ๋ณ๋์ ๋ค์ด๋ฐ ๊ท์น์ด ํ์์๋ค.
CSS๊ฐ ์ปดํฌ๋ํธ ์ค์ฝํ๋ก ์ ์ฉ๋๊ธฐ ๋๋ฌธ์ ํด๋์ค ๋ค์ ์ค๋ฒ๋ผ์ด๋ฉ ๋ฌธ์ ์์
CSS ์ฝ๋๊ฐ JS์ ์์ฑ๋๋ฏ๋ก ์ปดํฌ๋ํธ ์ํ ๊ณต์ ๊ฐ๋ฅ (์ํ์ ๋ฐ๋ฅธ ์คํ์ผ ์ฒ๋ฆฌ์ ์ ์ฉ)
CSS๊ฐ ์ปดํฌ๋ํธ ์ค์ฝํ๋ฅผ ๊ฐ์ง๋ฏ๋ก ์คํ์ผ ์์ ๋ฌธ์ ์์.
๊ทธ๋ฌ๋ ์ ๋ง CSS-in-JS๊ฐ ์ ๋ฆฌํ ๊น?
๊ทธ๋ฌ๋ ์ ๋ง CSS-in-JS๊ฐ ์ ๋ฆฌํ ๊น?
FOUC (Flash of unstyled content)
์คํฌ๋ฆฝํธ ๊ตฌ๋ฌธ์ด ๋ถ์๋์ด ์คํ์ผ์ด ์ ์ฉ๋๊ธฐ ์ ๋งํฌ์ ๋ ๊ทธ๋๋ก์ ๋ชจ์ต์ด ์๊ฐ์ ์ผ๋ก ๋ณด์ด๋ ํ์. ํ๋ ์์ํฌ์ ์คํ์ผ์ํธ๋ฅผ ์์ฑํด ๋ฌธ์์ ์ ์ฉํ๋ ๊ธฐ๋ฅ์ด ์๋ค๋ฉด ์ง์ ๊ตฌํํด์ผํจ.
Scripting ์ฑ๋ฅ
๊ฒฐ๊ณผ์ ์ผ๋ก ์ปดํฌ๋ํธ๊ฐ ๋ ๋๋ง ๋ ๋ ๋ฐํ์ ์ค๋ฒํค๋๋ฅผ ์ ๋ฐํ๋ค. CSS-in-JS ๋ฐฉ์์ ํ์ด์ง ๋ก๋ฉ ์ JS ๊ตฌ๋ฌธ ๋ถ์ ๊ณผ์ ์ด ํ์ํ๊ธฐ ๋๋ฌธ์ ๋์ ์ผ๋ก CSS๊ฐ ์ถ๊ฐ๋๋ ๊ตฌ์กฐ๋ ๋๋ฆด ์ ๋ฐ์ ์๋ค.
2. CSS
์ ์
CSS๋ ์น ํ์ด์ง์ ๋ ์ด์์๊ณผ ์คํ์ผ์ ์ ์ํ๋ ์คํ์ผ ์ธ์ด๋ค.
์ ํ์ (Selectors)
HTML ์์๋ฅผ ์ ํํ๊ธฐ ์ํด ์ ํ์๋ฅผ ์ฌ์ฉํ๋ค. ํน์ ์์๋ฅผ ์ ํํด ์คํ์ผ์ ์ ์ฉํ ์ ์๋ค.
์ ํ์ ์ข
๋ฅ
๊ธฐ์ตํด์ผ ํ๋ ์ ํ์ 30๊ฐ
Class ์ ํ์
ID ์ ํ์
์ ํ ์ ํ์(span, p, a ๋ ธ๋ ์ด๋ฆ)
์ ์ฒด ์ ํ์(*)
& nesting ์ ํ์: SCSS ๊ฐ์ ์ ์ฒ๋ฆฌ๊ธฐ์ ์๋ ์ ํ์์ธ๋ฐ ์ต๊ทผ์ ์ถ๊ฐ๋ ๊ฒ ๊ฐ๋ค. &๋ ์์ ์ ํ์๋ฅผ ์ฐธ์กฐํ๋ค.
๋ฐ์ค ๋ชจ๋ธ
๋ชจ๋ HTML ์์๋ ๋ฐ์ค ๋ชจ์์ผ๋ก ๊ตฌ์ฑ๋๋ฉฐ, ์ด๊ฒ์ box model์ด๋ผ ๋ถ๋ฅธ๋ค.
๋ฐ์ค ๋ชจ๋ธ์ ๊ตฌ์ฑ ์์
์ปจํ ์ธ ์์ญ (Content Area)
ํจ๋ฉ (์์ชฝ ์ฌ๋ฐฑ, Padding)
ํ ๋๋ฆฌ (ํ ๋๋ฆฌ ์ฌ๋ฐฑ, Border)
๋ง์ง (๋ฐ๊นฅ ์ฌ๋ฐฑ, Margin)
box-sizing: border-box ์์ฑ ์ฌ์ฉ์ border, padding์ ๊ณ ๋ คํด ๋ฐ์ค ํฌ๊ธฐ๊ฐ ๊ฒฐ์ ๋๋ค. width: 200px ์ผ ๊ฒฝ์ฐ, border์ padding์ด ๊ฐ๊ฐ 10px์ ์ฐจ์งํ๋ค๋ฉด ์ปจํ ์ธ ํฌ๊ธฐ๋ 160px
๋ฏธ๋์ด ์ฟผ๋ฆฌ
๋ฏธ๋์ด ์ฟผ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ฉด ๋ค์ํ ๋๋ฐ์ด์ค์ ํ๋ฉด ํฌ๊ธฐ์ ๋ฐ๋ผ CSS๋ฅผ ์ ํ์ ์ผ๋ก ์ ์ฉํ์ฌ ํ์ด์ง์ ์คํ์ผ์ ์ง์ ํ ์ ์๋ค.
Flexbox ๋งํฌ
Flexbox๋ฅผ ์ฌ์ฉํ๋ฉด ์์ ์์๋ค์ ํจ๊ณผ์ ์ผ๋ก ์ ๋ ฌํ๊ณ ์์ ์ฌ์ด์ ๊ณต๊ฐ ๋ฐฐ๋ถ์ ์กฐ์ ํ ์ ์๋ค.
Grid ๋งํฌ
Grid๋ ์ํ์ , ์์ง์ ์ผ๋ก ์ด๋ฃจ์ด์ง ์ด์ฐจ์ ๋ ์ด์์ ์์คํ ์ด๋ค. Flex์ ๋์ผํ๊ฒ ์ปจํ ์ด๋์ ์์ดํ ์ผ๋ก ๋ ์ด์์์ ์ก์ ์ ์๋ค.
์ถ๊ฐ ํค์๋
CSS-in-CSS
Last updated