<๐Ÿ’…> Styled Components

doodooยท2023๋…„ 2์›” 20์ผ
0
post-thumbnail

Styled Components

CSS-in-JS ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ค‘ ํ•˜๋‚˜๋กœ, ์ปดํฌ๋„ŒํŠธ ๊ธฐ๋ฐ˜์˜ ์Šคํƒ€์ผ๋ง์„ ์ œ๊ณตํ•œ๋‹ค.

์‚ฌ์ง„: CSS-Tricks | A Thorough Analysis ofย CSS-in-JS

  • Styled Components๋Š” CSS in JS ๊ฐœ๋…์ด ๋Œ€๋‘๋˜๋ฉด์„œ ๋‚˜์˜จ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ
  • ๋ฆฌ์•กํŠธ์˜ ๋“ฑ์žฅ์œผ๋กœ ์ปดํฌ๋„ŒํŠธ ๋‹จ์œ„ ๊ฐœ๋ฐœ์ด ์ฃผ๋ฅ˜๊ฐ€ ๋˜์—ˆ์ง€๋งŒ, CSS๋Š” ์—ฌ์ „ํžˆ ๋ถ„๋ฆฌ๋˜์–ด ์žˆ๋‹ค๋Š” ์ ์„ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ๋‚˜์™”๋‹ค.
  • CSS in JS ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด HTML+CSS+JS๋ฅผ ๋ฌถ์–ด์„œ ํ•˜๋‚˜์˜ JS ํŒŒ์ผ๋กœ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์žฅ์ ์ด ์žˆ๋‹ค.

Styled Components ์„ค์น˜ํ•˜๊ธฐ

๋จผ์ € ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์„ค์น˜ํ•œ๋‹ค.

# with npm
npm install --save styled-components

๊ทธ ๋‹ค์Œ, package.json์— ์•„๋ž˜ ์ฝ”๋“œ ์ถ”๊ฐ€ํ•˜๊ธฐ
์—ฌ๋Ÿฌ ๋ฒ„์ „์˜ Styled Components๊ฐ€ ์„ค์น˜๋˜์–ด ๋ฐœ์ƒํ•˜๋Š” ๋ฌธ์ œ๋ฅผ ์ค„์—ฌ์ค€๋‹ค.

{
  "resolutions": {
    "styled-components": "^5"
  }
}

๋งˆ์ง€๋ง‰์œผ๋กœ Styled Components๋ฅผ ์‚ฌ์šฉํ•  ํŒŒ์ผ์— ๋ถˆ๋Ÿฌ์˜จ๋‹ค.

import styled from "styled-components"

Styled Components ๋ฌธ๋ฒ•

1. ์ปดํฌ๋„ŒํŠธ ๋งŒ๋“ค๊ธฐ

const ์ปดํฌ๋„ŒํŠธ์ด๋ฆ„ = styled.ํƒœ๊ทธ์ด๋ฆ„`
	CSS์†์„ฑ1: ์†์„ฑ๊ฐ’;
	CSS์†์„ฑ2: ์†์„ฑ๊ฐ’;
`;
  • Tagged template literals ๋ฌธ๋ฒ•์„ ์‚ฌ์šฉํ•œ๋‹ค.
  • ์ปดํฌ๋„ŒํŠธ ์„ ์–ธ ํ›„ styled.ํƒœ๊ทธ์ด๋ฆ„์„ ํ• ๋‹นํ•˜๊ณ  ๋ฐฑํ‹ฑ ์•ˆ์— CSS ๋ฌธ๋ฒ•์„ ์ž‘์„ฑํ•œ๋‹ค.

2. ์ปดํฌ๋„ŒํŠธ ์žฌํ™œ์šฉํ•˜๊ธฐ

const ์ปดํฌ๋„ŒํŠธ์ด๋ฆ„ = styled(์žฌํ™œ์šฉํ•  ์ปดํฌ๋„ŒํŠธ)`
	CSS์†์„ฑ1: ์†์„ฑ๊ฐ’;
	CSS์†์„ฑ2: ์†์„ฑ๊ฐ’;
`;
  • ์ปดํฌ๋„ŒํŠธ๋ฅผ ์„ ์–ธํ•˜๊ณ  styled()์— ์žฌ์‚ฌ์šฉํ•  ์ปดํฌ๋„ŒํŠธ๋ฅผ ์ „๋‹ฌํ•œ๋‹ค.
  • ๋ฐฑํ‹ฑ ์•ˆ์— ์ถ”๊ฐ€ํ•˜๊ณ  ์‹ถ์€ ์Šคํƒ€์ผ ์†์„ฑ์„ ์ž‘์„ฑํ•œ๋‹ค.

3. Props ํ™œ์šฉํ•˜๊ธฐ

const ์ปดํฌ๋„ŒํŠธ์ด๋ฆ„ = styled.ํƒœ๊ทธ์ข…๋ฅ˜`
	CSS์†์„ฑ: ${(props) => ํ•จ์ˆ˜์ฝ”๋“œ}
`;
  • Styled Components๋กœ ๋งŒ๋“  ์ปดํฌ๋„ŒํŠธ๋„ props๋ฅผ ๋‚ด๋ ค์ค„ ์ˆ˜ ์žˆ๊ณ , ์กฐ๊ฑด๋ถ€ ๋ Œ๋”๋ง์ด ๊ฐ€๋Šฅํ•˜๋‹ค.
  • ${} ์•ˆ์— props๋ฅผ ์ธ์ž๋กœ ๋ฐ›๋Š” ํ•จ์ˆ˜๋ฅผ ๋งŒ๋“ค์–ด์„œ ์‚ฌ์šฉํ•œ๋‹ค.

4. ์ „์—ญ ์Šคํƒ€์ผ๋ง

๋จผ์ € Styled Components์—์„œ createGlobalStyle ํ•จ์ˆ˜๋ฅผ ๋ถˆ๋Ÿฌ์˜จ๋‹ค.

import { createGlobalStyle } from "styled-components";

์ด ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•ด์„œ CSS ํŒŒ์ผ์—์„œ ์ž‘์„ฑํ•˜๋“ฏ ์„ค์ •ํ•˜๊ณ  ์‹ถ์€ ์ „์—ญ ์Šคํƒ€์ผ์„ ์ž‘์„ฑํ•œ๋‹ค.

const GlobalStyle = createGlobalStyle`
	ํƒœ๊ทธ์ข…๋ฅ˜ {
      CSS์†์„ฑ1: ์†์„ฑ๊ฐ’;
      CSS์†์„ฑ2: ์†์„ฑ๊ฐ’;
      CSS์†์„ฑ3: ์†์„ฑ๊ฐ’;
	}
`

์ด๋ ‡๊ฒŒ ๋งŒ๋“ค์–ด์ง„ ์ปดํฌ๋„ŒํŠธ๋ฅผ ์ตœ์ƒ์œ„ ์ปดํฌ๋„ŒํŠธ์—์„œ ์‚ฌ์šฉํ•ด์ฃผ๋ฉด ์ „์—ญ์— ์ปดํฌ๋„ŒํŠธ์˜ ์Šคํƒ€์ผ์ด ์ ์šฉ๋œ๋‹ค.

  function App() {
    return (
      <>
      	<GlobalStyle />
      	<Button>์ „์—ญ ์Šคํƒ€์ผ ์ ์šฉํ•˜๊ธฐ</Button>
      </>
    );
}

0๊ฐœ์˜ ๋Œ“๊ธ€