[์์น ํ๋ก ํธ์๋] Styled-Components ๊ธฐ์ด ๋ฐฐ์ฐ๊ธฐ
๐ป INTRO
์ค๋์ React์ css๋ฅผ ์ ์ฉํ๋ ์ฌ๋ฌ ๋ฐฉ๋ฒ ์ค ๊ฐ์ฅ ๋ง์ด ์ฐ์ธ๋ค๋ Styled-Components์ ๋ํด ์์๋ณด๋ ค๊ณ ํฉ๋๋ค
Styled-Components๋ ์ปดํฌ๋ํธ ๋จ์๋ก ์คํ์ผ์ ์ง์ ํด์ฃผ๋ ๋ฐฉ์์ด๊ธฐ ๋๋ฌธ์ ๋ฆฌ์กํธ์ ํน์ฑ์ ๊ฐ์ฅ ์๋ง์ css ์์ฑ ๋ฐฉ์์ด๋ผ๊ณ ํ ์ ์์ต๋๋ค. ์ต๊ทผ ๋ฆฌ์กํธ ํ๋ก์ ํธ๋ฅผ ์งํํ๋ฉฐ Sass๋ฅผ ์ฌ์ฉํด๋ดค๋๋ฐ ๊ธฐ์กด css์ ๋นํด ๋งค์ฐ ํธ๋ฆฌํ์ง๋ง mixins ํ์ผ๋ค์ ์ ์ธํ๊ณ ๋ ์๋์ ๊ฐ์ด ์์ฒญ ๋ง์ scss ํ์ผ์ ๋ง๋ค์ด์ผ ํ์ต๋๋ค.
๊ทธ๋์ ์ฐพ์๋ณธ ๊ฒ Styled-Components ์ธ๋ฐ์!! Styled-Components๋ CSS-in-JS ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ด๊ธฐ ๋๋ฌธ์ CSS๋ฅผ JS ํ์ผ์ ๋ฐ๋ก ๋ฃ๋ ๋ฐฉ์์ ์ฌ์ฉํฉ๋๋ค. ์ค์ ๊ฐ๋จํ๊ฒ ์ฌ์ฉํด๋ณด๋ ์คํ์ผ์ ๋ฐ๊พธ๊ธฐ ์ํด ์ฌ๋ฌ ํ์ผ์ ๋ค์ง ํ์๊ฐ ์์ด์ ธ์ ์ ์ง๋ณด์์ ์ ๋ง ํธํ ๊ฒ ๊ฐ๋ค๋ ์ธ์์ ๋ฐ์์ต๋๋ค. ๊ทธ๋ผ ๊ธฐ๋ณธ์ ์ธ Styled-Components ์ฌ์ฉ๋ฒ์ ๋ํด ์์๋ณผ๊น์?
๐ป ์ค์ต
์ค์น ๋ฐฉ๋ฒ
$ npm i styled-components
์ฌ์ฉ ๋ฐฉ๋ฒ
-๋จผ์ import styled from 'styled-components' ๋ฅผ ๋งจ ์์ ์์ฑํด์ฃผ์ธ์
- ์ปดํฌ๋ํธ ์ด๋ฆ์ ๋๋ฌธ์๋ก ์์ํ๊ณ
- styled ๋ค์๋ ์ฌ์ฉํ HTML ํ๊ทธ๋ช ์ ์ ๋ ฅํด์ฃผ์ธ์
- ๊ทธ ํ ์คํ์ผ ์ํธ๋ ๋ฐฑํฑ(``)์ผ๋ก ๊ฐ์ธ์ ์์ฑํด์ฃผ์๋ฉด ๋ฉ๋๋ค!!!!
๐ ์๋ ๊ฐ๋จํ ์์๋ฅผ ๋ง๋ค์ด๋ณด๋ฉฐ Styled-Components๋ฅผ ๋ฐฐ์๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค.
import styled from 'styled-components';
const Title = styled.h1`
font-size: 1.5em;
text-align: center;
color: palevioletred;
`;
const Wrapper = styled.section`
padding: 4em;
background: papayawhip;
`;
return(
<Wrapper>
<Title>
Hello World!
</Title>
</Wrapper>
);
์ด๋ ๊ฒ styled ๋ค์ ์ํ๋ ํ๊ทธ ์ด๋ฆ์ ์ ์ด์ฃผ๊ณ ๋ฐฑํฑ ๊ธฐํธ ์์ ๊ธฐ์กด CSS๋ผ๊ณ ์๊ฐํ๊ณ ์์ฑํด์ฃผ๋ฉด ๋ฉ๋๋ค.
์ ์ฝ๋์์ Wrappper ์ปดํฌ๋ํธ ์๋ฆฌ์ section ํ๊ทธ๊ฐ ๋ค์ด๊ฐ๊ณ Title ์ปดํฌ๋ํธ ์๋ฆฌ์ h1์ด ๋ค์ด๊ฐ๋ค๊ณ ์๊ฐํ๋ฉด
์ดํด๊ฐ ์ฌ์ฐ์ค ๊ฑฐ์์. ์คํ์ผ์ ์ ํ ํ๊ทธ๋ฅผ ์ปดํฌ๋ํธ ํ์์ผ๋ก ๋ฃ์ด์ค๋ค๊ณ ์๊ฐํ์๋ฉด ๋ฉ๋๋ค!!
๐ Styled-Components์ props๋ฅผ ์ ์ฉํด๋ณด๊ธฐ
์ด๋ฒ์๋ props๋ฅผ ํ์ฉํด์ ์๋ ์์๋ฅผ ๋ง๋ค์ด ๋ณผ๊น์?
import styled from 'styled-components';
const Button = styled.button`
background: ${props => props.primary ? "palevioletred" : "white"};
color: ${props => props.primary ? "white" : "palevioletred"};
font-size: 1em;
margin: 1em;
padding: 0.25em 1em;
border: 2px solid palevioletred;
border-radius: 3px;
`;
return(
<div>
<Button>Normal</Button>
<Button primary>Primary</Button>
</div>
);
primary๋ฅผ props๋ก ๋๊ฒจ์ฃผ๊ณ ์ผํญ์ฐ์ฐ์๋ฅผ ์ฌ์ฉํ์ฌ ์กฐ๊ฑด์ ๋ง๋ ์คํ์ผ์ ์ง์ ํด์ฃผ๊ณ ์์ต๋๋ค. ์ด๋ ๊ฒ ํ๋ CSSํ์ผ์ ๋ฐ๋ก ์์ฑํ๋ ๋ฐฉ์๋ณด๋ค ์ฝ๋๊ฐ ๋ง์ด ์งง์์ง๊ณ ํ ๋์ ๋ณผ ์ ์์ด์ ์ข์ ๊ฒ ๊ฐ์ต๋๋ค :)
์ง๊ธ๊น์ง ๋ฐฐ์ด ๊ฒ์ Styled-Components์ ์์ฃผ ๊ธฐ๋ณธ์ ์ธ ์ฌ์ฉ ๋ฐฉ๋ฒ์ ๋๋ค. ์ด๋ฅผ ๋ฐํ์ผ๋ก ์๋ ํ์ด์ง๋ฅผ ๋ค์ด๊ฐ์ ๋ค์ํ ๋ฐฉ๋ฒ์ Styled-Components ํ์ฉ๋ฒ์ ์ตํ๋ฉด ์ข์ ๊ฒ ๊ฐ์ต๋๋ค!!!!!
https://styled-components.com/
์ฐธ๊ณ
https://styled-components.com/
์์นDT ๊ธฐ์ ์ฐ๊ณํ ํ๋ก ํธ์๋ ์ค๋ฌด ํ๋ก์ ํธ ๊ณผ์ 6์ฃผ์ฐจ ๋ธ๋ก๊ทธ ํฌ์คํ