๐๋ฆฌ์กํธ๋ฅผ ๋ค๋ฃจ๋ ๊ธฐ์ ๐์ ๊ณต๋ถํ๋ค๊ฐ 14์ฅ์์ ๋ด์ค๋ทฐ์ด๋ฅผ ๋ง๋๋ ๋ถ๋ถ์์ ์ฒ์์ผ๋ก styled-components์ ๋ํ ๋ถ๋ถ์ด ์ธ๊ธ๋์๋ค. ์ด ๋๋ถ์ ํ์ด์ง๋ ์ด์๊ฒ ์์ฑ๋์์ง๋ง ์ css, sass(scss)๋ฅผ ์ด์ฉํ์ง์๊ณ styled-components๋ฅผ ์ฌ์ฉํ ๊ฒ์ผ๊น? ์ด๋ฐ ๊ถ๊ธ์ฆ์ ์ป๊ฒ ๋์ด ๋๋ ๋ค์ ๊ตฌ๊ธ๋ง์ ์์ํ๋ค.
๊ตฌ๊ธ์ "styled-components"๋ฅผ ์ณ๋ณด์๋๋ ์ด ์น์ฌ์ดํธ๊ฐ ๋ด๋ค. ์คํ์ผ๋ ์ปดํฌ๋ํธ์ ๊ณต์ ์น์ฌ์ดํธ์ธ๊ฐ ๋ณด๋ค.
์ด ์ฌ์ดํธ์ ๋ฑ ์ฒ์์ ๋ค์ด๊ฐ์๋ง์ ๋ณด๋ฉด ์ด๋ ๊ฒ ์ฐ์ฌ์ ธ์๋ค.
Visual primitives for the component age? ์ผ๋จ ๋ญ ๋น์ฃผ์ผ์ ์ผ๋ก ๋์์ค๋ค๋ ์๋ฆฌ๊ฐ๋ค
Use the best bits of ES6 and CSS to style your apps without stress? ์ด ๋ง์ styled-component๋ฅผ ์ฌ์ฉํ๋ ์ฝ๋๋ฅผ ๋ณด๋ฉด ๋ฑ ์ค๋ช ์ด ๊ฐ๋ฅํ๋ค.
๊ทธ๋ ๋ค๋ฉด, ์ผ๋จ! ๋ฆฌ๋ค๊ธฐ ๋ด์ค๋ทฐ์ด ์์ ์ ๋ค์ด์๋ styled-component์ฝ๋๋ฅผ ๋จผ์ ๋ณด๋ฉด์ ์๊ธฐํด์ผ๊ฒ ๋ค.
const NewsListBlock = styled.div`
box-sizing: border-box;
padding-bottom: 3rem;
width: 768px;
margin: 0 auto;
margin-top: 2rem;
@media screen and (max-width: 768px){
width: 100%;
padding-left:1rem;
padding-right: 1rem;
}
`;
์ด ์ฝ๋๋ ๋ด์ค๋ฆฌ์คํธ์์ ํ๋ํ๋๋ง๋ค ๋ธ๋ญ์ ๋ํด ์ค์ ํด์ฃผ๊ณ ์๋ ์ฝ๋์ด๋ค.
๋ณด๋ฉด ์ผ๋จ const NewsListBlock = ์ด๊ฑด ๋ญ ์์ ๊ตฌ๋ฅด๊ณ ๋ค๋ฅผ ๊ตฌ๋ฅด๋ฉด์ ๋ด๋ ์๋ฐ์คํฌ๋ฆฝํธ ๋ฌธ๋ฒ์ด๋ค.
์ฌ๊ธฐ์ = styled.div` ์ด๋ถ๋ถ์ style. ๋ค์ ์๋ div ์ด๊ฑฐ๋ htmlํ๊ทธ ๋ฌธ๋ฒ์ด๋ค.
๊ทธ๋ฆฌ๊ณ ``; ์ด ๋ถ๋ถ ์์๋ ์ด ๋ถ๋ถ์ ๊พธ๋ฉฐ์ฃผ๊ณ ์ค์ ํด์ฃผ๋ css๋ฌธ๋ฒ์ผ๋ก ๊ฐ๋์ฐจ์๋ค.
์ ๊ทธ๋ฌ๋ฉด Use the best bits of ES6 and CSS to style your apps without stress ์์ ์ด๋ ๊ฒ ์จ์ ธ์๋ ์ค๋ช ์ด ๋ญ๊ฐ ์ดํด๊ฐ ๋๋๊ฐ?
์๋ฐ์คํฌ๋ฆฝํธ, css ๋ฌธ๋ฒ์ ๋ค ํฌํจํด์ ์ธ ์ ์๊ฒ ํด์ค์ ํธ๋ฆฌํ๋ค๋ ๊ฒ ๊ฐ๋ค.
์ผ๋จ ์ฌ๊ธฐ๊น์ง๋ง ๊ฐ๋จํ ์ดํดํด๋ณด๊ณ ๊ณต์ ์ฌ์ดํธ์ Documentation๋ถ๋ถ์ ๋ค์ด๊ฐ๋ดค๋๋ Motivation์ด๋ผ๊ณ ์จ์ ธ์๋ ๋ถ๋ถ์ ํด๋ฆญํ๋๋ ๋ด๊ฐ ์ฐพ๋ ์ ๊ตณ์ด๊ตณ์ด ์ฌ๋๋ค์ด styled-components๋ฅผ ์ฌ์ฉํ๋์ง์ ๋ํ ๋ด์ฉ์ด ์์ธํ๊ฒ ์ ํ์์๋ค.
- Automatic critical CSS : ์ผ๋จ ์ด๊ฑด ๋ถํ์ํ ์ฝ๋ ํ์ด์ง ๋ก๋ฉ์ ์ค์ฌ์ค๋ค๋ ์๊ธฐ๋ค. ๋ณดํต ํด๋น jsํ์ผ์ ๋ค์ด๊ฐ css์ฝ๋๋ค์ ๋ฐ๋ก cssํ์ผ์ ๋ง๋ค์ด์ ์ ๋๋ฐ, styled-components๋ ๊ทธ๋ด ํ์ ์์ด ํ ํ์ด์ง ์์ ์ปดํฌ๋ํธ๋ณ๋ก ๋ฐ๋ก๋ฐ๋ก ์ค์ ํ ์ ์๊ฒ ๋ง๋ค์ด์คฌ๋ค๋ ๊ฒ์ด๋ค.
- No class name bugs : ์ปดํฌ๋ํธ๋ฅผ ๋ง๋ค๋ฉด์ ๊ทธ ์ฆ์ ์คํ์ผ์ ๊ฐ์ด ์ค์ ํด์ฃผ๋ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ ๋ค๋ฅธ ๊ฒ๋ค๊ณผ ์ถฉ๋ํ์ง ์๊ฒ ๋๋ค๋ ์
- Easier deletion of CSS : ์ด๊ฒ๋ ์ปดํฌ๋ํธ๋ฅผ ๋ง๋ค๋ฉด์ ์คํ์ผ์ ๊ฐ์ด ์ค์ ํด์ฃผ๊ธฐ ๋๋ฌธ์ ๋ณด๊ธฐ๋ ํธํ๊ณ ์ง์ฐ๊ธฐ๋ ํธํ๊ณ ์์ ํ๊ธฐ๋ ํธํ๋ค๋ ๊ฒ
- Simple dynamic styling : JS์์ ์ฌ์ฉ๋๋ ๊ทธ๋ฐ dynamic property๋ค์ ์์ global theme๊ณผ global variable์ ์ฌ์ฉํด css๋ก ์ค์ ํด์ค์ ๋ค๋ฅด๊ฒ ์คํ๋ ์ ์๋๋ก ์์ ํ ์ ์๋ค๋ ์
- Painless maintenance : ์์์ ๋งํ๋ ๊ฒ๊ณผ ๋์ผํ๊ฒ cssํ์ผ, jsํ์ผ ์ด๋ ๊ฒ ๋ฐ๋ก๋ฐ๋ก ํ์ํ์ง ์๊ธฐ ๋๋ฌธ์ ์ ์ง๋ณด์ํ๋๋ฐ๋ ๊ฐํธํด์ง๋ค.
- Automatic vendor prefixing : ์๋๋ฉด ๊ณตํต์ ์ผ๋ก ์ฐ์ด๋ css์ฝ๋๋ค์ ๋ฐ๋ก cssํ์ผ์ ์จ๋๊ณ , ๊ทธ๊ฒ์ styled-components๋ฅผ ์ฌ์ฉํด์ ์ปดํฌ๋ํธ ๋ณ๋ก ์์ฉํด์ ์ฌ์ฉํ ์ ์๊ฒ๋ ์ธ ์ ์๋ค.
์ด๋ ๊ฒ ํ๋ํ๋๋ณด๋ ์ ์ ๊ฐ๋ฐ์๋ค์ด styled-components๋ฅผ ์ฌ์ฉํ๋์ง ํ์คํ ์ดํดํ๊ฒ ๋์๋ค.
styled-components ํจํค์ง ์ค์น ๋ฐฉ๋ฒ
$ npm install --save styled-components
$ yarn add styled-components
//๋ ์ค ์๋ฌด๊ฑฐ๋ ์จ๋ ์๊ด์๋ค.
//๊ผญ ์ค์นํ๊ณ package.json์ ์ ์ค์น๊ฐ ๋์๋์ง ํ์ธํด๋ณด์
๋ค ์ ๋ฆฌํด๋๊ณ ๋ณด๋ ๋ฒจ๋กํผํธ๋์ด css, scss, styled-components๋ฅผ ์ข ๋ฅ๋ณ๋ก ์ ๋ฆฌํด๋์ ํฌ์คํธ๋ฅผ ๋ฐ๊ฒฌํ์๋ค.
velog.io/@velopert/react-component-styling
์ด ํฌ์คํธ๋ ๊ฐ๊ฐ์ ์์ ๋ ํฌํจ๋์ด์์ผ๋ ์์ง ํท๊ฐ๋ฆฌ๋ ๋ถ๋ค์ด ์ฝ์ผ๋ฉด ์ข์ ๊ฒ ๊ฐ๋ค.
'WEB > REACT' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[React] ContextAPI๋ฅผ ์ฌ์ฉํด์ TodoList๋ง๋ค๊ธฐ(2) : contextAPI (0) | 2021.02.09 |
---|---|
[React] BrowserRouter VS HashRouter (0) | 2021.02.04 |
[React] ์ํ ์น (0) | 2021.02.03 |
[React] React๋ฅผ GitHub Page์ ๋ฌด๋ฃ ํธ์คํ ํ๊ธฐ(ํ์ด์ง ๋ง๋ค๊ธฐ) (0) | 2021.02.02 |
[React] ContextAPI๋ฅผ ์ฌ์ฉํด์ TodoList๋ง๋ค๊ธฐ(1) : styled-components (0) | 2021.01.31 |