๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
WEB

styled-components๋ฌด์ƒˆ์˜ tailwind CSS ๋„์ž…๊ธฐ - 1

by mingzoo 2024. 1. 8.

 

๐Ÿ‘€TL; DR

  • ์›๋ž˜๋Š” styled-components๋ฅผ ์ฃผ๋กœ ์‚ฌ์šฉํ–ˆ๋‹ค.
  • ๋””์ž์ธ์‹œ์Šคํ…œ ๊ตฌ์ถ•์„ ํ•˜๋ฉฐ styled-components์˜ ํ•œ๊ณ„๋ฅผ ๋Š๊ผˆ๋‹ค.
  • tailwind CSS๋ฅผ ๋„์ž…ํ–ˆ๋‹ค.
  • ์•„์ง์€ ํ˜ผ๋ž€์Šค๋Ÿฝ๋‹ค.. tailwind CSS๋ฅผ '์ž˜ ์“ฐ๋Š”' ๋ฐฉ๋ฒ•์„ ๋ชจ์ƒ‰์ค‘์ด๋‹ค

 

styled-components๋ฅผ ์‚ฌ์šฉํ–ˆ๋˜ ์ด์œ 

์Šคํƒ€์ผ๋“œ ์ปดํฌ๋„ŒํŠธ๋ฅผ ์‚ฌ์šฉํ–ˆ๋˜ ์ด์œ ๋Š” '์ปดํฌ๋„ŒํŠธํ™”'์— ์žˆ์—ˆ๋‹ค.

์ปดํฌ๋„ŒํŠธํ™”ํ•˜๋Š” ๊ฑธ ์ข‹์•„ํ•˜๊ธฐ๋„ ํ–ˆ๊ณ , ์ปดํฌ๋„ŒํŠธ ์ด๋ฆ„์„ ๋ช…์‹œํ•˜๋ฉด์„œ ๋ช…ํ™•ํžˆ ํ•ด๋‹น ํƒœ๊ทธ์˜ ์—ญํ• ์ด ๋“œ๋Ÿฌ๋‚œ๋‹ค๋Š” ์ ๋„ ์ข‹์•˜๋‹ค.

์ด ์ ์€ ๋ฒ„๊ทธ ํ”ฝ์‹ฑ์—๋„ ๊ต‰์žฅํžˆ ๊ฐ„ํŽธํ•จ์„ ๋Š๋ผ๊ฒŒ ํ•ด์คฌ๋‹ค. (๋ฌธ์ œ์˜ ์›์ธ์„ ์ฐพ๋Š” ๋ถ€๋ถ„์—์„œ ๋ช…์‹œ์„ฑ์˜ ์žฅ์ )

๊ทธ๋ฆฌ๊ณ  props๋กœ ์กฐ๊ฑด๋ถ€ ์Šคํƒ€์ผ๋ง์˜ ์žฅ์ ๋„ ๋งค์šฐ ์ข‹์•˜๋‹ค.

๋ฐ˜๋ณต๋˜๋Š” ์ปดํฌ๋„ŒํŠธ์—์„œ ์ƒ‰๊น”๋งŒ ๋ฐ”๋€Œ๋Š” ๊ฒฝ์šฐ๋ฅผ ๋งŽ์ด ๋ดค๊ณ , ๋ฐ˜๋ณต๋˜๋Š” ์ฝ”๋“œ๋ฅผ ์ค„์ผ ์ˆ˜ ์žˆ์—ˆ๋‹ค.

 

์œ„์˜ ์ด์œ ๋กœ ์Šคํƒ€์ผ๋ง์„ styled-components ๋กœ ์‚ฌ์šฉํ–ˆ์—ˆ๋‹ค.

์ด์ „๊นŒ์ง€ ์Šคํƒ€์ผ๋“œ ์ปดํฌ๋„ŒํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด์„œ ๋ถˆํŽธํ•œ ์ ์ด ์—†์—ˆ๋Š”๋ฐ, ์ด๋ฒˆ์— ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ํ•˜๋ฉด์„œ ๋ถˆํŽธํ•œ ์ ์„ ๋„ˆ๋ฌด ๋Š๊ปด๋ฒ„๋ ธ๋‹ค,,

 

styled-components์˜ ํ•œ๊ณ„

์ด๋ฒˆ ํ”„๋กœ์ ํŠธ๋ฅผ ํ•˜๋ฉด์„œ ๋Š๊ผˆ๋˜ styled-components์˜ ์•„์‰ฌ์šด ์ ์€ ๋ฐ”๋กœ ๋””์ž์ธ ์‹œ์Šคํ…œ์„ ๋งŒ๋“œ๋Š” ๋ฐ ์žˆ์—ˆ๋‹ค.

์ด๋ฒˆ ํ”„๋กœ์ ํŠธ๋Š” ์ข€ ๋” ์ฒด๊ณ„์ ์œผ๋กœ ์ง„ํ–‰ํ•ด๋ณด๊ณ  ์‹ถ์—ˆ๋˜ ๋งˆ์Œ์ด ์žˆ์–ด์„œ ํ˜ผ์ž ๋””์ž์ธ ์‹œ์Šคํ…œ๊ณผ ํƒ€์ดํฌ๊ทธ๋ž˜ํ”ผ ์‹œ์Šคํ…œ์„ ์ฐพ์•„์„œ ์ ์šฉํ•ด๋ณด๋ คํ–ˆ์—ˆ๋‹ค.

ํ•˜์ง€๋งŒ, styled-components์˜ ํ˜•ํƒœ๋กœ ๋‚˜ํƒ€๋‚ด๋ ค๊ณ  ํ•˜๋‹ค๋ณด๋‹ˆ ํƒ€์ดํฌ๊ทธ๋ž˜ํ”ผ์—๋Š” styled-components์˜ ํ˜•ํƒœ๊ฐ€ ๋„ˆ๋ฌด ๋ฌด๊ฒ๊ฒŒ ๋Š๊ปด์กŒ๋‹ค.

์ด ์‚ฌ์ง„์ฒ˜๋Ÿผ font-size๊ฐ€ ์‚ด์ง ๋‹ค๋ฅด๊ฑฐ๋‚˜, ๋‹ค ๋˜‘๊ฐ™์€๋ฐ font-weight๋งŒ ๋ฐ”๋€Œ๊ฑฐ๋‚˜ ํ•˜๋Š”๋ฐ ์ปดํฌ๋„ŒํŠธ์˜ ํ˜•์‹์œผ๋กœ ์„ ์–ธํ•˜๋‹ค๋ณด๋‹ˆ ๋น„ํšจ์œจ์ ์ด๋ผ๊ณ  ๋Š๊ปด์กŒ๋‹ค.

๋˜ํ•œ, ์‚ฌ์šฉํ• ๋•Œ๋„ ๋งˆ์ฐฌ๊ฐ€์ง€์˜€๋‹ค.

<PageWrap>
	<button><Body3Medium>๋กœ๊ทธ์ธ</Body3Medium></button>
</PageWrap>

 

์œ„์˜ ์ฝ”๋“œ์ฒ˜๋Ÿผ ๋‹จ์ง€ ํƒ€์ดํฌ๊ทธ๋ž˜ํ”ผ ์„ค์ •์„ ํ•ด์ฃผ๊ณ  ์‹ถ์—ˆ์„ ๋ฟ์ด์—ˆ๋Š”๋ฐ ํƒœ๊ทธ๋กœ ๊ฐ์‹ธ์•ผํ•˜๋Š” ์ƒํ™ฉ์„ ๋ฐ˜๋ณตํ•˜๋ฉด์„œ '์ด๊ฒŒ ์•„๋‹Œ๋ฐ..', '์ด ๋ฐฉ๋ฒ•๋ฐ–์—๋Š” ์—†๋Š”๊ฑด๊ฐ€' ํ•˜๋ฉด์„œ ์˜๋ฌธ์ด ๊ฐ€๋“ํ•œ ์ƒํ™ฉ์ด์—ˆ๋‹ค.

 

๊ทธ๋ž˜์„œ ๋งŽ์€ ๊ณ ๋ฏผ๋์— ์Šคํƒ€์ผ๋ง์„ ์ „๋ฉด ๊ต์ฒดํ•˜๊ธฐ๋กœ ๋งˆ์Œ ๋จน์—ˆ๋‹ค.

 

tailwind CSS์˜ ๋„์ž…

https://fe-developers.kakaoent.com/2022/221013-tailwind-and-design-system/

https://fe-developers.kakaoent.com/2022/220303-tailwind-tips/

 

์Šคํƒ•์ผ๋ง์„ ๋ฐ”๊พธ๊ธฐ๋กœ ๊ฒฐ์‹ฌํ•˜๊ณ  ๋‚˜์˜ ํ›„๋ณด๋Š” emotion๊ณผ tailwind CSS์˜€๋‹ค.

์œ„์˜ ๋งํฌ์˜ ๊ธ€์„ ์ง„์งœ ํ•œ 5๋ฒˆ์”ฉ์€ ์ฝ์–ด๋ณธ ๊ฒƒ ๊ฐ™๋‹ค.

 

๊ฒฐ๋ก ์„ ๋จผ์ € ๋งํ•˜์ž๋ฉด,

tailwind๊ฐ€ ๊ฐ•๋ ฅํ•˜๊ฒŒ ๋ฐ€์–ด๋ถ™์ด๋Š” 'utility'์˜ ์žฅ์ ์„ ํฌ๊ฒŒ ๋ดค๋‹ค.

๊ทธ๋ฆฌ๊ณ , tailwind.config.js์—์„œ ์•„๋ž˜ ์ฝ”๋“œ์ฒ˜๋Ÿผ ์Šคํƒ€์ผ๋ง์„ ์ปค์Šคํ„ฐ๋งˆ์ด์ง•ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์„ ๋ณด๊ณ  ๋””์ž์ธ์‹œ์Šคํ…œ์„ ๋„์ž…ํ•˜๊ธฐ์— ๊ต‰์žฅํžˆ ์ ํ•ฉํ•˜๊ฒ ๋‹ค!๋ผ๋Š” ์ƒ๊ฐ์„ ํ–ˆ๋‹ค.

 

์ง€๊ธˆ๊นŒ์ง€์˜ ์ƒํ™ฉ

  • ๋‹จ์ˆœ๊ตฌํ˜„์— ๊ต‰์žฅํ•œ ์ด์ ์ด ์žˆ๋‹ค.

์‚ฌ์‹ค tailwind๊ฐ€ ๋Ÿฌ๋‹์ปค๋ธŒ๊ฐ€ ์žˆ๋‹ค๊ณ  ๋“ค์—ˆ๋Š”๋ฐ, ๊ฐœ์ธ์ ์œผ๋กœ๋Š” ๋ณด๊ธฐ๋งŒํ–ˆ์„ ๋•Œ๋Š” ๋ง‰๋ง‰ํ–ˆ๋˜ ๊ฒŒ ์ปธ๋Š”๋ฐ ๋ง‰์ƒ ๋ช‡๋ฒˆ ํ•ด๋ณด๋‹ˆ๊นŒ ๊ธˆ๋ฐฉ ์ ์‘ํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค. ์ธ๋ผ์ธ ์Šคํƒ€์ผ๋ง ํ•˜๋“ฏ์ด ํ•˜๋Š” ๋Š๋‚Œ์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋  ๊ฒƒ ๊ฐ™๋‹ค.

๊ทผ๋ฐ, ๋‹จ์ˆœ css๋ž‘์€ ์“ฐ๋Š” ๋„ค์ด๋ฐ์ด ๋‹ฌ๋ผ์„œ ๊ฐ€๋…์„ฑ์ด ๊ทธ๋ ‡๊ฒŒ ์ข‹๋‹ค๊ณ  ๋Š๋ผ์ง„ ๋ชปํ–ˆ๋‹ค. ์ด๋ฒˆ ํ”„๋กœ์ ํŠธ์—์„œ ์—ด์‹ฌํžˆ ์“ฐ๊ณ  ํ•œ 3๊ฐœ์›”๋งŒ ์ง€๋‚˜๊ณ  ๋‹ค์‹œ ์œ ์ง€๋ณด์ˆ˜ํ•˜๋ผ๊ณ  ํ•˜๋ฉด ๋‹ค์‹œ ๋ฒ„๋ฒ…์ผ ๊ฒƒ ๊ฐ™์€ ๊ธฐ๋ถ„์ด ๋“ ๋‹ค.

  • tailwind CSS๋Š” component-driven ๊ฐœ๋ฐœ์„ ํ•˜์ง€ ๋ชปํ•œ๋‹ค.

์ด ์ ์€ ์ง€๊ธˆ๊นŒ์ง€ ๋‚ด๊ฐ€ ๋Š๋ผ๋Š” tailwind์˜ ์ตœ๋Œ€ ๋‹จ์ ์ด๋ผ๊ณ  ์ƒ๊ฐํ•œ๋‹ค. ์ฒ˜์Œ์—๋Š” ๋‚ด๊ฐ€ tailwind๋ฅผ ์•„์ง ์“ด์ง€ ๋ช‡ ์ผ ๋ฐ–์— ์•ˆ๋์œผ๋‹ˆ ์ž˜ ์“ฐ๋Š” ๋ฐฉ๋ฒ•์„ ๋ชฐ๋ผ์„œ๋ผ๊ณ  ์ƒ๊ฐํ–ˆ๋‹ค. ์‚ฌ์‹ค ๋งž๋‹ค

๊ธ€๋“ค์„ ๋งŽ์ด ์ฐพ์•„๋ณด๋‹ˆ twin Macro๋ฅผ ๊ฐ™์ด ์‚ฌ์šฉํ•ด์„œ ๋‹จ์ ์„ ๋ณด์™„ํ•œ ์ผ€์ด์Šค๋„ ์žˆ์—ˆ๋Š”๋ฐ, ๊ทธ๋Ÿฌ์ง€ ์•Š์œผ๋ ค๊ณ  ์Šคํƒ€์ผ๋ง ๋ฐฉ์‹์„ ๋ฐ”๊ฟจ๋Š”๋ฐ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ํ•˜๋‚˜ ๋” ์‚ฌ์šฉํ•˜๊ฒŒ ๋งŒ๋“œ๋Š” ๊ฒŒ ๊ณผ์—ฐ ์ข‹์€ ๋ฐฉ์‹์ธ๊ฐ€์— ๋Œ€ํ•œ ์˜๋ฌธ์ด ๋“ค์–ด ์ด ๋ฐฉ๋ฒ•์€ ์•„์ง ๋ณด๋ฅ˜์ค‘์ด๋‹ค.

 

์•„๋ž˜ ์‚ฌ์ง„์„ ๋ณด๋ฉด, ๋‚ด๊ฐ€ ์“ด ์ฝ”๋“œ๋‹ค.

๋‚˜๋Š” ์ด๋ ‡๊ฒŒ tailwind๋ฅผ ์“ฐ๋ฉด์„œ ์ง„์งœ ์ˆ˜๋ฐฑ๋ฒˆ๋„ ๋” '์ด๊ฒŒ ๋งž๋‚˜?'๋ผ๋Š” ์ƒ๊ฐ์ด ๋“ค์—ˆ๋‹ค.

๊ทธ๋ž˜์„œ ์š”์ฆ˜์—๋Š” tailwind์„ ํšจ์œจ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ์‹์— ๋Œ€ํ•ด์„œ ์—ฐ๊ตฌ์ค‘์ด๋‹ค.

๋ถ„๋ช… ๋ชจ๋“  ์Šคํƒ€์ผ๋ง์˜ ๋ฐฉ์‹์€ ์žฅ๋‹จ์ ์ด ์žˆ์„๊ฑฐ๊ณ , ๋‚ด๊ฐ€ ์ž˜ ์“ฐ๋Š” ๋ฐฉ๋ฒ•์„ ์•„์ง ๋ชจ๋ฅด๋Š” ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐ๋œ๋‹ค. ๊ทผ๋ฐ ๋งŽ์€ ์ž๋ฃŒ๋ฅผ ์ฐพ์•„๋ดค๋Š”๋ฐ ๋งˆ๋•…ํ•œ๊ฒŒ ์—†์—ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‹ค๊ฐ€ ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค์ด tailwind๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ๊ถ๊ธˆํ•ด์„œ ์‚ฌ๋žŒ๋“ค์˜ ๊นƒํ—™์„ ์ฐพ์•„๋ณด๊ธฐ ์‹œ์ž‘ํ–ˆ๊ณ , ๊ทธ ์•ˆ์—์„œ ๋‚˜์˜ ๋ฐฉ์‹์„ ๊ตฌ์ถ•์ค‘์— ์žˆ๋‹ค.

ํ”„๋กœ์ ํŠธ๊ฐ€ ๊ธฐ๊ฐ„์ด ์ •ํ•ด์ ธ์žˆ๋‹ค๋ณด๋‹ˆ, ๊ณ ๋ฏผํ•˜๋Š” ๋ฐ์— ์‹œ๊ฐ„์„ ๋„ˆ๋ฌด ๋งŽ์ด ๋Œ ์ˆ˜ ์—†์–ด์„œ ๋ฆฌํŒฉํ† ๋ง์„ ์ค‘๊ฐ„์ด๋‚˜ ๋งˆ์ง€๋ง‰์— ๋งŽ์ด ํ•˜์ง€ ์•Š์„๊นŒ ์‹ถ๋‹ค.

 

์ง€๊ธˆ ํ˜„์žฌ๋Š”..

<div className="p-5 w-32 rounded">
  <div className="flex">
    <img className="rounded w-full" src="https://bit.ly/2k1H1t6" />
    <div className="flex flex-row mt-2">
      <div className="rounded py-2 px-4 bg-mono-400">
        <div className="text-mono-100">๋‹ด๊ธฐ</div>
      </div>
      <div className="text-sm font-bold text-pale-100">
        Perfect Night
      </div>
    </div>
    <span className="text-xl font-semibold">
      LE SSERAFIM
    </span>
    <span className="text-xl font-semibold">$119/night</span>
    <div className="flex flex-row items-center">
      <Icon src={MdStar} color="#ED8936" />
      <span className="text-sm">
        <span className="font-bold">4.84</span>
        (190)
      </span>
    </div>
  </div>
</div>

์ด ์ฝ”๋“œ์ฒ˜๋Ÿผ ์ƒ๊ธด ๋‚ด ์ฝ”๋“œ๋ฅผ

<Box padding={5} width="320px" border="sm">
  <Stack gap={2}>
    <Image borderRadius="md" src="https://bit.ly/2k1H1t6" />
    <Row gap={2}>
      <Badge color="#702459">๋‹ด๊ธฐ</Badge>
      <Spacer left={2}>
        <Text size="sm" weight="bold" color="#702459">
          Perfect Night
        </Text>
      </Spacer>
    </Row>
    <Text size="xl" weight="semibold">
      LE SSERAFIM
    </Text>
    <Text>$119/night</Text>
    <Row gap={1}>
      <Icon src={MdStar} color="#ED8936" />
      <Text size="sm">
        <Text size="sm" weight="bold">
          4.84
        </Text>{" "}
        (190)
      </Text>
    </Row>
  </Stack>
</Box>

 

์ด ์ฝ”๋“œ์ฒ˜๋Ÿผ ๋‚˜ํƒ€๋‚ผ ์ˆ˜ ์žˆ๋„๋ก ๋ฆฌํŒฉํ† ๋ง์„ ํ•˜๊ณ  ์žˆ๋‹ค.

์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ์ปดํฌ๋„ŒํŠธํ™”ํ•˜๋ฉด์„œ ๋””์ž์ธ์‹œ์Šคํ…œ, ํƒ€์ดํฌ๊ทธ๋ž˜ํ”ผ ์‹œ์Šคํ…œ ๋ชจ๋‘ ๊ฐ€์ ธ๊ฐˆ ์ˆ˜ ์žˆ๋‹ค๊ณ  ํŒ๋‹จ๋˜์–ด ์—ด์‹ฌํžˆ ์ˆ˜์ •์ค‘์ด๋‹ค.

 

 

์ด๋Ÿฐ ๊ฒฝํ—˜์„ ํ†ตํ•ด์„œ ์งง์ง€๋งŒ, ๋จธ๋ฆฌ ๋œฏ์–ด์งˆ๋“ฏ์ด ๊ณ ๋ฏผํ•˜๊ณ  ๋„์ž…ํ•˜๋ฉด์„œ ์™œ ํšŒ์‚ฌ๋“ค์ด ๋ฆฌํŒฉํ† ๋ง์„ ์‰ฝ๊ฒŒ ํ•  ์ˆ˜ ์—†๋Š”์ง€, ๋ฐฉ์‹์„ ๋ฐ”๊ฟ€ ๋•Œ ์™œ ๋ฐ˜๋Œ€๋ฅผ ํ•˜๋Š”์ง€ ๊ฐ„์ ‘์ ์œผ๋กœ๋‚˜๋งˆ ๋Š๋‚„ ์ˆ˜ ์žˆ์—ˆ๋˜ ๊ฒƒ ๊ฐ™๋‹ค.

์ผ๋‹จ ์ด๋ฒˆ ํ”„๋กœ์ ํŠธ ์Šคํƒ€์ผ๋ง ๋ชฉํ‘œ๋Š”

- ๋””์ž์ธ ์‹œ์Šคํ…œ ๊ตฌ์ถ•

- tailwind CSS๋ฅผ '์ž˜์“ฐ๋Š”' ํšจ์œจ์ ์ธ ๋ฐฉ์‹ ๊ตฌ์ถ•

- ํ”„๋กœ์ ํŠธ์—์„œ tailwind ๋์žฅ๋ณด๊ธฐ

์ด๋‹ค.

 

๋” ์—ด์‹ฌํžˆ ๋”ฅํ•˜๊ฒŒ ์จ๋ณด๊ณ  ํ”„๋กœ์ ํŠธ๊ฐ€ ๋๋‚˜๊ณ  2ํƒ„์œผ๋กœ ๋Š๋‚€์ ๋“ค์„ ๊ฐ€์ ธ์˜ค๊ฒ ๋‹ค.

 

 

์ฐธ๊ณ 

https://sancho.dev/blog/tailwind-and-design-systems

 

728x90