Styled Components는 앞서 배운 CSS in JS 라는 개념이 대두되면서 나온 라이브러리로, CSS in JS 라이브러리를 사용하면 CSS도 쉽게 Javascript 안에 넣어줄 수 있으므로, HTML + JS + CSS까지 묶어서 하나의 JS파일 안에서 컴포넌트 단위로 개발할 수 있게 된다. 이런 CSS in JS 라이브러리 중에서 현재 가장 인기 있는 라이브러리가 바로 Styled Components 이다.
# with npm
$ npm install --save styled-components
# with yarn
$ yarn add styled-components
{
"resolutions": {
"styled-components": "^5"
}
}
import styled from "styled-components"
import styled from "styled-components";
//백틱 안에 기존에 CSS를 작성하던 문법과 똑같이 스타일 속성을 작성해주기
const BlueButton = styled.button`
background-color: blue;
color: white;
`;
//만들어진 컴포넌트를 재활용해 컴포넌트를 만들기 가능!
const BigBlueButton = styled(BlueButton)`
padding: 10px;
margin-top: 10px;
`;
//재활용한 컴포넌트를 재활용도 가능!
const BigRedButton = styled(BigBlueButton)`
background-color: red;
`;
// React 컴포넌트를 사용하듯이 사용
export default function App() {
return (
<>
<BlueButton>Blue Button</BlueButton>
<br />
<BigBlueButton>Big Blue Button</BigBlueButton>
<br />
<BigRedButton>Big Red Button</BigRedButton>
</>
);
}
import styled from "styled-components";
import GlobalStyle from "./GlobalStyle";
//받아온 prop 값을 그대로 이용해 렌더링 할 수 있다
const Button1 = styled.button`
background: ${(props) => (props.color ? props.color : "white")};
`;
//다음과 같은 형식으로도 활용 가능!
const Button2 = styled.button`
background: ${(props) => props.color || "white"};
`;
export default function App() {
return (
<>
<GlobalStyle />
<Button1>Button1</Button1>
<Button1 color="orange">Button1</Button1>
<Button1 color="tomato">Button1</Button1>
<br />
<Button2>Button2</Button2>
<Button2 color="pink">Button2</Button2>
<Button2 color="turquoise">Button2</Button2>
</>
);
}
Styled Components에서 createGlobalStyle 함수를 불러오기
import { createGlobalStyle } from "styled-components";```
함수를 사용해 CSS 파일에서 작성하듯 설정해주고 싶은 스타일을 작성
const GlobalStyle = createGlobalStyle`
button {
padding : 5px;
margin : 2px;
border-radius : 5px;
}
` ```
만들어진 < GlobalStyle > 컴포넌트를 최상위 컴포넌트에서 사용해주면 전역에 < GlobalStyle > 컴포넌트의 스타일이 적용!
npx storybook init
npm run storybook