[React] Styled Components

kimhannaยท2020๋…„ 11์›” 8์ผ
0

๐Ÿ’๐Ÿผ ์™œ CSS in JS?


  • CSS ํด๋ž˜์Šค ๋ช…์— ๋Œ€ํ•œ ๊ณ ๋ฏผ
  • ์ •ํ•ด์ง„ ๊ฐ€์ด๋“œ๊ฐ€ ์—†์œผ๋ฉด ๊ตฌ์กฐ๊ฐ€ ๋ณต์žกํ•ด์ง‘๋‹ˆ๋‹ค.
  • ๋ฐฉ๋Œ€ํ•œ ์Šคํƒ€์ผ ์ •๋ณด๋กœ ์ธํ•œ ์Šคํฌ๋กค ์ง€์˜ฅ๋„ ์—ฌ์ „ํ•ฉ๋‹ˆ๋‹ค.
  • ์—ฌ์ „ํžˆ CSSํด๋ž˜์Šค ์กฐ๊ฑด๋ถ€ ์Šคํƒ€์ผ์„ ํ•˜๊ณ ์žˆ์Šต๋‹ˆ๋‹ค.
  • CSS ํด๋ž˜์Šค๋กœ ์กฐ๊ฑด๋ถ€ ์Šคํƒ€์ผ๋ง์„ ํ•˜๋”๋ผ๋„ ๋™์ ์ธ ๋ณ€ํ™”๋ฅผ ํ‘œํ˜„ํ•˜๊ธฐ์— ํ•œ๊ณ„๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

๐Ÿ˜ณ๊ทธ๋Ÿฌ๋ฉด ์ธ๋ผ์ธ ์Šคํƒ€์ผ์€ ์•ˆ๋ ๊นŒ์š”?

Inline Styles์˜ ๊ฒฝ์šฐ

  • CSS ๋ช…์‹œ๋„(์šฐ์„  ์ˆœ์œ„)์˜ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์—„๋ฐ€ํ•˜๊ฒŒ CSS๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค.
  • ๋ฌธ์„œ์˜ ๊ตฌ์กฐ๋ฅผ ๋ช…์‹œํ•˜๋Š” html ํŒŒ์ผ์˜ ๋ถ€ํ”ผ๊ฐ€ ์ฆ๊ฐ€ํ•˜๊ณ  CSS ํŒŒ์ผ๊ณผ์˜ ์—ญํ•  ๋ถ„๋ฆฌ๊ฐ€ ๋ชจํ˜ธํ•ด์ง‘๋‹ˆ๋‹ค. (CSS โ‡’ ์›น ๋ฌธ์„œ์˜ ์Šคํƒ€์ผ๋ง ์ •๋ณด)
  • Pseudo selector๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. (ex. :hover, :after)
  • media query, key frame ๋˜ํ•œ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

๐Ÿ˜†Solution: CSS๋ฅผ JS์— ์‹ธ์„œ ๋“œ์…”๋ณด์„ธ์š”!

<style>
.hash136s21 {
  background-color: black;
  color: white;
}
</style>

<p class="hash136s21">Hello CSS-in-JS</p>
  • ํด๋ž˜์Šค๋ช…์„ ํ•ด์‹œ๊ฐ’์œผ๋กœ ์ž๋™ ์ƒ์„ฑํ•˜๊ณ , ํด๋ž˜์Šค๋ช… ์˜ค์—ผ ๋˜ํ•œ ๋ฐฉ์ง€ํ•ฉ๋‹ˆ๋‹ค.
  • CSS ๋ฌธ๋ฒ•์„ ์˜จ์ „ํ•˜๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ๋™์ ์ธ ๊ฐ’๋“ค์„ ์˜จ์ „ํ•˜๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • CSS-in-JS๋Š” CSS๋ฅผ ๋ฌธ์„œ(.css) ๋‹จ์œ„๊ฐ€ ์•„๋‹ˆ๋ผ ์ปดํฌ๋„ŒํŠธ ๋‹จ์œ„๋กœ ์ถ”์ƒํ™”ํ•˜์—ฌ ์ ์šฉํ•˜๊ธฐ์— ์•Œ๋งž์Šต๋‹ˆ๋‹ค.
    • ์ปดํฌ๋„ŒํŠธ์™€ ์Šคํƒ€์ผ์ด ํ•˜๋‚˜์˜ ํŒŒ์ผ๋กœ ๊ฒฐํ•ฉ๋˜์–ด ๋ชจ๋“ˆํ™”๊ฐ€ ์ˆ˜์›”ํ•ด์ง‘๋‹ˆ๋‹ค.
    • ๋ฌด์—‡๋ณด๋‹ค๋„ ํ˜„๋Œ€ ์›น์€ ์ปดํฌ๋„ŒํŠธ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์ถ”์ƒํ™”์˜ ๋‹จ์œ„๋ฅผ ๊ตฌ์„ฑํ•˜๋ฉฐ ๋ฐœ์ „ํ•ด๋‚˜๊ฐ€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
    • Angular, React, Vue ๋“ฑ์˜ ๊ฐ€์žฅ ์ธ๊ธฐ ์žˆ๋Š” SPA ํ”„๋ ˆ์ž„์›Œํฌ์—์„œ ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋นผ๋†“๊ณ ๋Š” ์„ค๋ช…ํ•˜๊ธฐ ํž˜๋“ค ์ •๋„๋กœ ์ค‘์š”ํ•œ ๊ฐœ๋…์„ ์ฐจ์ง€ํ•˜๊ณ  ์žˆ๋‹ค๋Š” ์‚ฌ์‹ค์€ ๊ตณ์ด ๊ฐ•์กฐํ•˜์ง€ ์•Š์•„๋„ ์ถฉ๋ถ„ํ•˜๊ฒ ์ฃ ?

๐Ÿ”ฅ์™œ Styled Components๋ฅผ ๊ณ ๋ คํ•ด์•ผ ํ• ๊นŒ?

  • css-in-js๋Š” 2018๋…„ ์ดํ›„ ํญ๋ฐœ์ ์œผ๋กœ ์„ฑ์žฅํ•ด์™”์Šต๋‹ˆ๋‹ค. ๊ทธ ์ค‘ Styled-Components๋Š” npm ๋‹ค์šด๋กœ๋“œ ์ˆ˜ ๊ธฐ์ค€์œผ๋กœ ํ˜„์žฌ ๊ฐ€์žฅ ์ธ๊ธฐ ์žˆ๋Š” css-in-js ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ž…๋‹ˆ๋‹ค.

๐Ÿ’ช๐ŸปGetting Started

import style from 'styled-components'

render(
	<Wrapper>
    <Title>
      Hello World!
    </Title>
  </Wrapper>
);    
profile
ํ•œ ์ค„์˜ ์ฝ”๋“œ๊ฐ€ ์œ ์ €์˜ ์ผ์ƒ์„ ๋ณ€ํ™”์‹œํ‚ค๋Š” ๋งค๋ ฅ์— ๋ฐ˜ํ•ด ํ”„๋ก ํŠธ์—”๋“œ ๊ฐœ๋ฐœ์ž๊ฐ€ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋Š˜ ๋ฐฐ์›€์˜ ์ž์„ธ๋กœ ์œ ์ €๋ฅผ ์œ„ํ•œ ๊ธฐ์ˆ ์„ ๊ตฌํ˜„ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ์ €๋Š” ํ•จ๊ป˜ ์ด๋ค„๋‚ด๋Š” ๊ฒฐ๊ณผ์˜ ๊ฐ€์น˜๋ฅผ ๋ฏฟ์Šต๋‹ˆ๋‹ค.

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