styled-components

ํ•™์Šต ํ‚ค์›Œ๋“œ

  • Styled Components

    • ์„ค์น˜ ๋ฐ ์„ค์ •

    • ๊ธฐ๋ณธ ๋ฌธ๋ฒ•

    • props

    • attrs

    • Reset CSS

    • Global Style

    • Theme

๐Ÿ’…๐Ÿป styled-components

  • CSS in JS ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ

  • CSS์˜ ๋ฌธ์ œ์ ์„ ํ•ด๊ฒฐํ•˜๊ณ ์ž ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์ฝ”๋“œ๋กœ CSS๋ฅผ ์ž‘์„ฑํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ์„ค๊ณ„

  • Tagged Template Literals ๋ฌธ๋ฒ• ์‚ฌ์šฉ

๐Ÿ“– Tagged Template Literals ES6์— ์ถ”๊ฐ€ ๋œ ๋ฌธ๋ฒ•์œผ๋กœ template literals ์˜ ๋”์šฑ ๋ฐœ์ „๋œ ํ•œ ํ˜•ํƒœ๋กœ ํƒœ๊ทธ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ํ…œํ”Œ๋ฆฟ ๋ฆฌํ„ฐ๋Ÿด์„ ํ•จ์ˆ˜๋กœ ํŒŒ์‹ฑ ํ•  ์ˆ˜ ์žˆ๋‹ค. ํƒœ๊ทธ ํ•จ์ˆ˜์˜ ์ฒซ๋ฒˆ์งธ ์ธ์ˆ˜๋Š” ๋ฌธ์ž์—ด ๊ฐ’์˜ ๋ฐฐ์—ด์„ ํฌํ•จํ•˜๊ณ , ๋‚˜๋จธ์ง€ ์ธ์ˆ˜๋Š” ํ‘œํ˜„์‹๊ด€ ๊ด€๋ จ๋˜์–ด ์žˆ๋‹ค.

โš™๏ธ ์„ค์น˜ ๋ฐ ์„ค์ •

  • ํŒจํ‚ค์ง€ ์„ค์น˜

    • Babel Plugin์„ SWC์—์„œ ์“ธ ์ˆ˜ ์žˆ๋„๋ก ํฌํŒ…ํ•œ ๊ฒƒ๋„ ํ•จ๊ป˜ ์„ค์น˜ @swc/plugin-styled-components

    • โญ๏ธ SSR ์ง€์› ๋“ฑ์„ ์œ„ํ•œ ๊ณต์‹ ๊ถŒ์žฅ์‚ฌํ•ญ

๊ธฐ๋ณธ ์‚ฌ์šฉ๋ฒ•

  • sytel.์›ํ•˜๋Š” ํƒœ๊ทธ ์“ฐ๊ณ  ๋ฆฌํ„ฐ๋„๋ฐฉ์‹์œผ๋กœ css ์†์„ฑ๋“ค์„ ๋„ฃ์–ด์ฃผ๋ฉด ๋œ๋‹ค.

props

  • props๋ฅผ ์ด์šฉํ•ด์„œ ํ™œ์„ฑํ™” ์—ฌ๋ถ€๋ฅผ ํ‘œํ˜„ํ•˜๊ฑฐ๋‚˜ ํŠน์ • ์Šคํƒ€์ผ์„ ์žก์•„ ์ฃผ๊ณ  ์‹ถ์„ ๋•Œ ์œ ์šฉ

attrs

  • ๊ธฐ๋ณธ ์†์„ฑ์„ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๋‹ค. ๋ถˆํ•„์š”ํ•˜๊ฒŒ ๋ฐ˜๋ณต๋˜๋Š” ์†์„ฑ์„ ์ฒ˜๋ฆฌํ•  ๋•Œ ์œ ์šฉ

    • ๋ฒ„ํŠผ์„ ๋งŒ๋“ค ๋•Œ ์ ๊ทน์ ์œผ๋กœ ํ™œ์šฉ

Reset CSS

styled-components ์—์„œ Reset CSS ์ฒ˜๋Ÿผ ํƒœ๊ทธ๋“ค์˜ ๊ธฐ๋ณธ ์†์„ฑ์„ ์ดˆ๊ธฐํ™” ํ•˜๊ธฐ ์œ„ํ•ด ์„ค์น˜

  • ์ตœ์ƒ์œ„ ์ปดํฌ๋„ŒํŠธ ์ ์šฉ

Global Style

  • styles ํด๋” , GlobalStyle.ts ํŒŒ์ผ ์ƒ์„ฑ

  • ์ตœ์ƒ์œ„ ์ปดํฌ๋„ŒํŠธ ์ ์šฉ

Theme

  • Theming โ†’ <ThemeProvider> ํ™œ์šฉ

  • ๋””์ž์ธ ์‹œ์Šคํ…œ์˜ ๊ทผ๊ฐ„์„ ๋งˆ๋ จํ•˜๋Š” ํ™œ์šฉ

  • ex.๋‹คํฌ๋ชจ๋“œ ๋Œ€์‘ํ•˜๊ธฐ ์‰ฌ์›€

styles/defaultTheme.ts ํŒŒ์ผ ์ƒ์„ฑ

์—ญ์œผ๋กœ typeof ๋ฅผ ์‚ฌ์šฉํ•ด์„œ Theme ํƒ€์ž… ์ง€์ • โ†’ styles/Theme.ts ํŒŒ์ผ ์ƒ์„ฑ

styles/darkTheme.ts ํŒŒ์ผ ์ƒ์„ฑํ•ด์„œ Theme ์œผ๋กœ ํƒ€์ž… ์ง€์ •

์ตœ์ƒ์œ„ <ThemeProvider> ์ปดํฌ๋„ŒํŠธ๋ฅผ ํ†ตํ•ด ๊ณต๊ธ‰

๊ณต๊ธ‰ ๋ฐ›์€ theme์„ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„  ํƒ€์ž… ์ง€์ • ํ•„์š” โ†’ styled.d.ts ํŒŒ์ผ ์ƒ์„ฑ

  • ์•„๋ž˜ ์ฝ”๋“œ ์ฒ˜๋Ÿผ ํ•˜๋‚˜์”ฉ ์ง€์ •ํ•ด์ค˜๋„ ๋˜์ง€๋งŒ, ์†์„ฑ๋“ค์ด ์ถ”๊ฐ€๋  ๊ฐ€๋Šฅ์„ฑ์„ ๊ณ ๋ คํ•ด์„œ Theme.ts ํ™œ์šฉ

๋˜๋Š”

๐Ÿ“Œ Theme ์˜๋ฏธ ์žˆ๊ฒŒ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด ์ฐธ๊ณ 

๐Ÿšจ window.matchMedia Error ๋ฐœ์ƒ

window.matchMedia ๋Š” ์‚ฌ์šฉ์ž์˜ ์‹œ์Šคํ…œ ์„ค์ •์˜ ํ…Œ๋งˆ๋ฅผ ์ธ์‹ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•œ๋‹ค.

Jest ๊ณต์‹๋ฌธ์„œ์—๋Š” src/setupTests.ts ํŒŒ์ผ ํ•ด๋‹น ์ฝ”๋“œ ์‚ฌ์šฉํ•ด์„œ ์ด์Šˆ๋ฅผ ํ•ด๊ฒฐํ•˜๋ผ๊ณ  ์•ˆ๋‚ดํ•˜๊ณ  ์žˆ๋‹ค.

๐Ÿ”— ์ฐธ๊ณ 

Last updated