그럼 가보자고~
styled-components란 Javascript 파일 내에서 CSS를 사용할 수 있게 해주는 대표적인 CSS-in-JS 라이브러리로 React 프레임워크를 주요 대상으로 한 라이브러리이다.
styled-coponents 는 styled-components 라이브러리를 사용하여 리액트 컴포넌트를 쉽게 만들 수 있으며 Javascript 코드 내에서 일반 CSS로 구성 요소의 스타일을 지정할 수 있다!
설치
npm i styled-components
const {내가 정한 component 이름} = styled.{태그명} ``;
import styled from "styled-components";
const Button = styled.button``;
button
태그의 스타일 컴포넌트를 만들 거라고 적은 것.import styled from "styled-components";
const Button = styled.button`
background-color : black;
color: white;
`;
function App() {
return (
<Button>Button_1</Button>
<Button>Button_2</Button>
<Button>Button_3</Button>
)
}
const Father = styled.div`
display: flex;
`;
const BoxOne = styled.div`
background-color : teal;
width: 100px;
height: 100;
`;
const BoxTwo = styled.div`
background-color : tomato;
width: 100px;
height: 100;
`;
function App() {
return
<Father>
<BoxOne/>
<BoxTwo/>
</Father>
}
const Text = styled.span`
color : white;
`;
function App() {
return
<Father>
<BoxOne>
<Text>Hello</Text>
</BoxOne>
<BoxTwo/>
</Father>
}
<BoxOne/>
과 <BoxTwo/>
스타일 컴포넌트에서 다른 점은background-color
차이 뿐이다.const Box = styled.div`
background-color : teal;
width: 100px;
height: 100;
`;
function App() {
return
<Father>
<Box />
<Box />
</Father>
}
<BoxOne />
과 <BoxTwo />
를 합쳐 <Box />
하나의 컴포넌트로 만들어주자const Box = styled.div`
background-color : ${props => props.bgColor}; <<<----
width: 100px;
height: 100;
`;
function App() {
return
<Father>
<Box bgColor="teal"/> <<<----
<Box bgColor="tomato"/> <<<----
</Father>
}
styled()
생성자에 구성하면 된다.const Button = styled.button`
padding: 0.25em 1em;
border: 2px solid palevioletred;
`;
const TomatoButton = styled(Button)`
color: tomato;
`;
const Btn = styled.button`
color : white;
background-color:tomato;
border:0;
border-radius: 15px;
`;
fucntion App() {
return (
<Btn>Log in</Btn>
<Btn>Log in</Btn>
)
}
const Btn = styled.button`
color : white;
background-color:tomato;
border:0;
border-radius: 15px;
`;
fucntion App() {
return (
<Btn>Log in</Btn>
<Btn as="a" href="/">Log in</Btn> <<<-----
)
}
as
prop 을 사용하여 button
태그를 a
태그로 바꿨다 :) const Input = style.input`
background-color: tomato;
`;
function App() {
return (
<Input />
<Input />
<Input />
<Input />
<Input />
)
}
<Input />
컴포넌트가 전부다 required
여야 한다고 했을때,<Input />
컴포넌트 하나하나에 prop 으로 required
를 주지 않아도,const Input = style.input.attrs({ required: true })` <<<---
background-color: tomato;
`;
function App() {
return (
<Input />
<Input />
<Input />
<Input />
<Input />
)
}
attrs({ })
안에 후에 input 으로 전달될 모든 속성을 가진 오브젝트를 담아주면 된다.