styled-components

styled-components

๐ŸŒž styled-components

๐ŸŒฅ styled-components๋ž€

๊ธฐ์กด ๋”์„ ๋งŒ๋“œ๋Š” ๋ฐฉ์‹์ธ css, scss ํŒŒ์ผ์„ ๋ฐ–์— ๋‘๊ณ , ํƒœ๊ทธ๋‚˜ id, class์ด๋ฆ„์œผ๋กœ ๊ฐ€์ ธ์™€ ์“ฐ์ง€ ์•Š๊ณ , ๋™์ผํ•œ ์ปดํฌ๋„ŒํŠธ์—์„œ ์ปดํฌ๋„ŒํŠธ ์ด๋ฆ„์„ ์“ฐ๋“ฏ ์Šคํƒ€์ผ์„ ์ง€์ •ํ•˜๋Š” ๊ฒƒ์„ styled-components๋ผ๊ณ  ๋ถ€๋ฆ…๋‹ˆ๋‹ค. css ํŒŒ์ผ์„ ๋ฐ–์— ๋‘์ง€ ์•Š๊ณ , ์ปดํฌ๋„ŒํŠธ ๋‚ด๋ถ€์— ๋„ฃ๊ธฐ ๋•Œ๋ฌธ์—, css๊ฐ€ ์ „์—ญ์œผ๋กœ ์ค‘์ฒฉ๋˜์ง€ ์•Š๋„๋ก ๋งŒ๋“ค์–ด์ฃผ๋Š” ์žฅ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค.


๐ŸŒฅ ํ™˜๊ฒฝ์„ค์ •


๐ŸŒฅ ์˜ˆ์‹œ


๐ŸŒฅ styled components ๋งŒ๋“ค๊ธฐ

const ์ปดํฌ๋„ŒํŠธ๋ช… = styled.ํƒœ๊ทธ๋ช…์Šคํƒ€์ผ ๋„ฃ๊ธฐ...๋ฌธ๋ฒ•์œผ๋กœ ๋งŒ๋“ค์–ด์ง‘๋‹ˆ๋‹ค. ๋งŒ๋“ค๊ณ ์žํ•˜๋Š” ์ปดํฌ๋„ŒํŠธ์˜ render ํ•จ์ˆ˜ ๋ฐ–์—์„œ ๋งŒ๋“ญ๋‹ˆ๋‹ค.


๐ŸŒฅ ์Šคํƒ€์ผ์— props ์ ์šฉํ•˜๊ธฐ

styled-component๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์žฅ์  ์ค‘ ํ•˜๋‚˜๊ฐ€ ๋ณ€์ˆ˜์— ์˜ํ•ด ์Šคํƒ€์ผ์„ ๋ฐ”๊ฟ€ ์ˆ˜ ์žˆ๋‹ค๋Š” ์ ์ž…๋‹ˆ๋‹ค. ์œ„ ์˜ˆ์‹œ๋ฅผ ๋ณด๋ฉด email์ด๋ผ๋Š” state๊ฐ’์— ๋”ฐ๋ผ ExampleWrap์— prop์œผ๋กœ ๋‚ด๋ ค์ค€ active๋ผ๋Š” ๊ฐ’์ด true or false๋กœ ๋ฐ”๋€Œ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. styled-component๋Š” ๋‚ด๋ถ€์ ์œผ๋กœ props์„ ๋ฐ›์„ ์ˆ˜ ์žˆ๊ณ , ๊ทธ props์— ๋”ฐ๋ผ ์Šคํƒ€์ผ์„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


๐ŸŒฅ ์Šคํƒ€์ผ ์ƒ์†

const ์ปดํฌ๋„ŒํŠธ๋ช… = styled.์Šคํƒ€์ผ์ปดํฌ๋„ŒํŠธ๋ช…์Šคํƒ€์ผ ๋„ฃ๊ธฐ...๋ฌธ๋ฒ•์œผ๋กœ ๋งŒ๋“ค์–ด์ง‘๋‹ˆ๋‹ค. ๊ธฐ์กด์— ์žˆ๋Š” ์Šคํƒ€์ผ์ปดํฌ๋„ŒํŠธ๋ฅผ ์ƒ์†๋ฐ›์•„ ์žฌ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.


๐ŸŒฅ Mixin css props

css props๋Š” ์ž์ฃผ ์“ฐ๋Š” css ์†์„ฑ์„ ๋‹ด๋Š” ๋ณ€์ˆ˜์ž…๋‹ˆ๋‹ค. css ๋ณ€์ˆ˜๋ช… = css์Šคํƒ€์ผ... ๋กœ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.


๐ŸŒฅ ๋‹ค๋ฅธ ํŒŒ์ผ์—์„œ ์ปดํฌ๋„ŒํŠธ import

ํ•ด๋‹น ํŒŒ์ผ์—์„œ ์ •์˜ํ•œ css๋ฅผ exportํ•˜์—ฌ ๋‹ค๋ฅธ ํŒŒ์ผ์—์„œ import ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


๐ŸŒฅ ๋ฐ˜์‘ํ˜•๋””์ž์ธ

์œ„ ์˜ˆ์‹œ๋ฅผ ์‘์šฉํ•˜๋ฉด ๋ฐ˜์‘ํ˜•์„ ์‰ฝ๊ฒŒ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. styled-components-media (opens new window)์ด ๋งํฌ๋ฅผ ๊ณต๋ถ€ํ•˜์‹œ๋ฉด ์ข‹์„ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.


๐ŸŒฅ global css

ํ”„๋กœ์ ํŠธ ์ „์—ญ์œผ๋กœ ๋ฐœ๋™ํ•˜๋Š” css๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


๐ŸŒฅ attribute ์ถ”๊ฐ€


๐ŸŒฅ css ๋ชจ๋“ˆ ๋ถ„๋ฆฌ


๐ŸŒฅ global Theme

์ „์—ญ์œผ๋กœ css๋ฅผ ์ •์˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. (์ƒ‰, css ๋“ฑ)

1.root ๋ ˆ๋ฒจ์— ๊ณต๋™์œผ๋กœ ์‚ฌ์šฉํ•  theme.js๋ฅผ ๋งŒ๋“ ๋‹ค

2.ThemePrivider๋ฅผ ํ”„๋กœ์ ํŠธ์˜ root dir์— importํ•˜๊ณ  ์•„๋ž˜์™€ ๊ฐ™์ด ์ •์˜ํ•œ๋‹ค

3.์ „์—ญ์—์„œ ํ˜ธ์ถœํ•˜์—ฌ ์‚ฌ์šฉํ•œ๋‹ค.


๐ŸŒฅ ๊ธ€๋กœ๋ฒŒ css์— minxin ๊ธฐ๋Šฅ์„ ๋„ฃ๊ณ  ์–ด๋А ์ปดํฌ๋„ŒํŠธ์—์„œ๋‚˜ ์‚ฌ์šฉํ•˜๊ฒŒ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  1. global-styled.ts์— mixin์„ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค.

2.global-styled๋ฅผ ์›น์˜ ๊ฐ€์žฅ ์ƒ๋‹จ index.js์— import ํ•ฉ๋‹ˆ๋‹ค

3.์ดํ›„ ์•„๋ฌด ์ปดํฌ๋„ŒํŠธ์—์„œ๋‚˜ ๊ธ€๋กœ๋ฒŒ์—์„œ ์ •์˜ํ•œ mixin๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

JP
์ด์ค‘ํ‘œFrontend Engineer

3๋…„์ฐจ ํ”„๋ก ํŠธ์—”๋“œ ๊ฐœ๋ฐœ์ž. Next.js, React, TypeScript ๊ธฐ๋ฐ˜ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœ ์ „๋ฌธ. ๋Œ€๊ทœ๋ชจ ํŠธ๋ž˜ํ”ฝ ํ™˜๊ฒฝ์—์„œ SSRยทISR ๋ Œ๋”๋ง ์ „๋žต ์„ค๊ณ„ ๊ฒฝํ—˜.

์ด๋ ฅ์„œ ๋ณด๊ธฐโ†’