Skip to content

styled_components

sang-gyeong lee edited this page Oct 28, 2020 · 1 revision

Styled-Components

์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋งŽ์€ ๊ฒฝ์šฐ ์Šคํƒ€์ผ๋ง์„ ํ•˜๋‹ค๋ณด๋ฉด ๋ถˆํŽธํ•จ์ด ์ƒ๊ธฐ๋Š”๋ฐ

  1. class ๋งŒ๋“ค์–ด๋†“์€๊ฑธ ๊นŒ๋จน๊ณ  ์ค‘๋ณตํ•ด์„œ ๋˜ ๋งŒ๋“ค๊ฑฐ๋‚˜
  2. ๊ฐ‘์ž๊ธฐ ๋‹ค๋ฅธ ์ด์ƒํ•œ ์ปดํฌ๋„ŒํŠธ์— ์›ํ•˜์ง€์•Š๋Š” ์Šคํƒ€์ผ์ด ์ ์šฉ๋˜๊ฑฐ๋‚˜
  3. CSS ํŒŒ์ผ์ด ๋„ˆ๋ฌด ๊ธธ์–ด์ ธ์„œ ์ˆ˜์ •์ด ์–ด๋ ต๊ฑฐ๋‚˜ ์™€ ๊ฐ™์€ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

์ด๋•Œ styled-components๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ปดํฌ๋„ŒํŠธ ์ œ์ž‘์‹œ ์Šคํƒ€์ผ์„ ๋ฐ”๋กœ ์ž…ํžŒ ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋งŒ๋“ฆ์œผ๋กœ์จ ์œ„์™€๊ฐ™์€ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์„ค์น˜๋ฐฉ๋ฒ•

yarn add styled-components
npm install styled-components
import styled from 'styled-components'

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

์ด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ด์šฉํ•˜์‹œ๋ฉด ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋งŒ๋“ค ๋•Œ ์Šคํƒ€์ผ์„ ๋ฏธ๋ฆฌ ์ฃผ์ž…ํ•ด์„œ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ์‹œ๋กœ, padding : 20px์ธ div๋ฐ•์Šค๋ฅผ styled-components๋ฅผ ์ด์šฉํ•ด ๋งŒ๋“ค์–ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

import React, { useState } from 'react';
import styled from 'styled-components';

let ๋ฐ•์Šค = styled.div`
  padding : 20px;
`;

function Detail(){
  return (
    <div>
      <HTML ๋งŽ์€ ๊ณณ/>
      <๋ฐ•์Šค></๋ฐ•์Šค>
    </div>
  )
}
  1. div๋ฐ•์Šค๋ฅผ ํ•˜๋‚˜ ๋งŒ๋“ค๊ณ  ์‹ถ์œผ๋ฉด ์ €๋ ‡๊ฒŒ styled.div ๋ผ๋Š”๊ฑธ ์‚ฌ์šฉํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค. (pํƒœ๊ทธ๋Š” styled.p)
  2. ๊ทธ๋ฆฌ๊ณ  ๊ทธ ์˜ค๋ฅธ์ชฝ์— โ€œ backtick ๊ธฐํ˜ธ๋ฅผ ์ด์šฉํ•ด์„œ ๊ธฐ๋ณธ ์Šคํƒ€์ผ์„ ๋‹ค ๋„ฃ์–ด์ฃผ๋ฉด ๋ฉ๋‹ˆ๋‹ค.
  3. ์ด๋ฅผ ๋ณ€์ˆ˜๋กœ ์ €์žฅํ•˜๋ฉด ์ปดํฌ๋„ŒํŠธ๊ฐ€ ์™„์„ฑ๋ฉ๋‹ˆ๋‹ค. ์›ํ•˜๋Š” ๊ณณ์— ์‚ฌ์šฉํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

๊ทธ๋Ÿผ ์ตœ์ข…์ ์œผ๋กœ padding : 20px์ธ div๋ฐ•์Šค๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ex) font-size : 25px์ธ h4 ํƒœ๊ทธ ์ƒ์„ฑ

import React, { useState } from 'react';
import styled from 'styled-components';

let ๋ฐ•์Šค = styled.div`
  padding : 20px;
`;
let ์ œ๋ชฉ = styled.h4`
  font-size : 25px;
`;

function Detail(){
  return (
    <div>
      <HTML ๋งŽ์€ ๊ณณ/>
      <๋ฐ•์Šค>
        <์ œ๋ชฉ>์•ˆ๋…•ํ•˜์„ธ์š”</์ œ๋ชฉ>
      </๋ฐ•์Šค>
    </div>
  )
}

์ถ”๊ฐ€ ๋ฌธ๋ฒ• : props๋กœ ์Šคํƒ€์ผ๋งํ•˜๊ธฐ

์—ฌ๋Ÿฌ๊ฐ€์ง€ ์‚ฌ์šฉ๋ฒ• ์ค‘ ๊ฐ€์žฅ ์œ ์šฉํ•œ๊ฑด ๋ฐ”๋กœ props๋กœ ์Šคํƒ€์ผ๋งํ•˜๋Š” ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค. ์—ฌ๋Ÿฌ๊ฐ€์ง€ ๋น„์Šทํ•œ UI๊ฐ€ ํ•„์š”ํ•œ ๊ฒฝ์šฐ ์–ด์ฉŒ์ฃ ? (ex ์œ„์—์„œ ๋งŒ๋“  ์ œ๋ชฉ (h4) ์š”์†Œ๊ฐ€ ์—ฌ๋Ÿฌ๊ฐ€์ง€ ์ƒ‰๊น” ๋ฒ„์ „์œผ๋กœ ํ•„์š”ํ•  ๋•Œ)

๊ทธ๋Ÿผ ์ œ๋ชฉ์š”์†Œ๋ฅผ ์—ฌ๋Ÿฌ๋ฒˆ ๋ณต์‚ฌํ•˜๋Š” ๊ฒƒ ๋ณด๋‹ค๋Š” ๋‹ค์–‘ํ•œ ์Šคํƒ€์ผ์ด ํ•„์š”ํ•œ ๊ณณ์—์„œ props ๋ฌธ๋ฒ•์„ ์ด์šฉํ•ด ๊ฐœ๋ฐœํ•ด์ฃผ๋ฉด ๋ฉ๋‹ˆ๋‹ค.

import React, { useState } from 'react';
import styled from 'styled-components';

let ๋ฐ•์Šค = styled.div`
  padding : 20px;
`;
let ์ œ๋ชฉ = styled.h4`
  font-size : 25px;
  color : ${ props => props.์ƒ‰์ƒ };
`;

function Detail(){
  return (
    <div>
      <HTML ๋งŽ์€ ๊ณณ/>
      <๋ฐ•์Šค>
        <์ œ๋ชฉ>์•ˆ๋…•ํ•˜์„ธ์š”</์ œ๋ชฉ>
      </๋ฐ•์Šค>
    </div>
  )
}

โ–ฒ ์ œ๋ชฉ(h4)์— color๋ผ๋Š” ์Šคํƒ€์ผ์„ ๋„ฃ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ƒ‰์ƒ๊ธฐ์ž…๋ž€์— ${ props =&gt; props.์ƒ‰์ƒ } ์ด๋ผ๋Š” ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค. โ€“ ${} ์ด๋ผ๋Š” ๋ฌธ๋ฒ•์€ ๋ฌธ์ž๋ฅผ ์ƒ์„ฑํ•˜๋Š” โ€œ ๋ฐฑํ‹ฑ ๊ธฐํ˜ธ์•ˆ์—์„œ ์“ธ ์ˆ˜ ์žˆ๋Š” ES6 ๋ฌธ๋ฒ•์ธ๋ฐ, ๋ฌธ์ž ์ค‘๊ฐ„์ค‘๊ฐ„ ํ•จ์ˆ˜๋‚˜ ๋ณ€์ˆ˜๋ฅผ ์ง‘์–ด๋„ฃ๊ณ  ์‹ถ์„ ๋•Œ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. โ€“ ๊ทธ๋ฆฌ๊ณ  props.์ƒ‰์ƒ์ด๋ผ๋Š” props ๋ณ€์ˆ˜๋ฅผ ์—ฌ๊ธฐ์— ์ง‘์–ด๋„ฃ์€ ๊ฒ๋‹ˆ๋‹ค. ๊ทธ๋ƒฅ ${ props.์ƒ‰์ƒ } ์ด๋ ‡๊ฒŒ ๋„ฃ์œผ๋ฉด ์•ˆ๋˜๊ณ  ์ €๋ ‡๊ฒŒ ์ฝœ๋ฐฑํ•จ์ˆ˜๋กœ ๋„ฃ์œผ์…”์•ผํ•ฉ๋‹ˆ๋‹ค.

import React, { useState } from 'react';
import styled from 'styled-components';

let ๋ฐ•์Šค = styled.div`
  padding : 20px;
`;
let ์ œ๋ชฉ = styled.h4`
  font-size : 25px;
  color : ${ props => props.์ƒ‰์ƒ };
`;

function Detail(){
  return (
    <div>
      <HTML ๋งŽ์€ ๊ณณ/>
      <๋ฐ•์Šค>
        <์ œ๋ชฉ ์ƒ‰์ƒ="blue">์•ˆ๋…•ํ•˜์„ธ์š”1</์ œ๋ชฉ>
        <์ œ๋ชฉ ์ƒ‰์ƒ={'red'}>์•ˆ๋…•ํ•˜์„ธ์š”2</์ œ๋ชฉ>
      </๋ฐ•์Šค>
    </div>
  )
}

โ–ฒ props๋กœ ์ž๋ฆฌ์žก์€ ๋ถ€๋ถ„์— ์›ํ•˜๋Š” ๋ฌธ์ž๋ฅผ ์ „์†กํ•ด์ค„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์œ„์˜ ์˜ˆ์ œ์—์„  props.์ƒ‰์ƒ์ด๋ผ๋Š” props์— ๊ฐ๊ฐ blue๋ผ๋Š” ๋ฌธ์ž, red๋ผ๋Š” ๋ฌธ์ž๊ฐ€ ๋“ค์–ด๊ฐ€์„œ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค. ์‹คํ–‰ ํ™”๋ฉด์„ ํ†ตํ•ด ๊ฐ๊ฐ์˜ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋‹ค๋ฅธ ์ƒ‰์œผ๋กœ ๋œจ๋Š”๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฐ™์€ ์ปดํฌ๋„ŒํŠธ์ธ๋ฐ props ๋ฌธ๋ฒ•์„ ์ด์šฉํ•ด ๊ฐ๊ฐ ๋‹ค๋ฅธ ์Šคํƒ€์ผ์„ ๋„ฃ์„ ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ด์ฃ .

styled-component์˜ ์žฅ์ 

  1. ์Šคํƒ€์ผ๋„ฃ์„ ๋•Œ ๋‹ค๋ฅธ ํŒŒ์ผ์ด๋ž‘ ์ปดํฌ๋„ŒํŠธ ๋ช…์ด ๊ฒน์ณ๋„ ์ „ํ˜€ CSS์ ์œผ๋กœ ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธฐ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  2. ๊ทธ๋ฆฌ๊ณ  ๋‚˜์ค‘์— ์ปดํฌ๋„ŒํŠธ ์Šคํƒ€์ผ ์ˆ˜์ •์„ ์›ํ•  ๋•Œ CSS๊ฐ€ ์•„๋‹ˆ๋ผ ์ปดํฌ๋„ŒํŠธ ํŒŒ์ผ์„ ์ฐพ์œผ๋ฉด ๋˜๋‹ˆ ์ˆ˜์ •๋„ ํŽธ๋ฆฌํ•˜๊ณ ์š”.
Clone this wiki locally