npm install styled-components
import styled from "styled-components";
const Wrapper = styled.div`
display: flex;
`;
const Box = styled.div`
background-color: teal;
width: 100px;
height: 100px;
`;
function App() {
return (
<Wrapper>
<Box />
</Wrapper>
);
}
export default App;
① 컴포넌트에 데이터 보내기.
import styled from "styled-components";
const Wrapper = styled.div`
display: flex;
`;
const Box = styled.div`
background-color: ${(props) => props.bgColor};
width: 100px;
height: 100px;
`;
const Circle = styled.div`
background-color: ${(props) => props.bgColor};
width: 100px;
height: 100px;
border-radius: 50%;
`;
function App() {
return (
<Wrapper>
<Box bgColor="teal" />
<Circle bgColor="tomato" />
</Wrapper>
);
}
export default App;
② 같은 스타일 사용하기.
import styled from "styled-components";
const Wrapper = styled.div`
display: flex;
`;
const Box = styled.div`
background-color: ${(props) => props.bgColor};
width: 100px;
height: 100px;
`;
const Circle = styled(Box)` //Box 에있는 스타일을 공통으로 사용.
border-radius: 50%; //Circle만 가지는 스타일.
`;
function App() {
return (
<Wrapper>
<Box bgColor="teal" />
<Circle bgColor="tomato" />
</Wrapper>
);
}
export default App;
import styled from "styled-components";
const Wrapper = styled.div`
display: flex;
`;
const Input = styled.input.attrs({ required: true, minLength: 10 })`
background-color: gray;
`;
function App() {
return (
<Wrapper>
<Input />
<Input />
<Input />
</Wrapper>
);
}
export default App;
import styled, { keyframes } from "styled-components";
const Wrapper = styled.div`
display: flex;
`;
const rotation = keyframes`
from{
transform: rotate(0deg);
}
to {
transform: rotate(360deg);
}
`;
const Box = styled.div`
background-color: teal;
width: 100px;
height: 100px;
animation: ${rotation} 2s linear infinite;
`;
function App() {
return (
<Wrapper>
<Box />
</Wrapper>
);
}
export default App;
const Box = styled.div`
background-color: teal;
width: 100px;
height: 100px;
span {
font-size: 36px;
}
`;
function App() {
return (
<Box>
<span>🚀</span>
</Box>
);
}
const Rockets = styled.span`
font-size: 36px;
`;
const Box = styled.div`
background-color: teal;
width: 100px;
height: 100px;
${Rockets} {
font-size: 36px;
}
`;
function App() {
return (
<Wrapper>
<Box>
<Rockets>🚀</Rockets>
</Box>
</Wrapper>
);
}
기본적으로 모든 색상을 가지고 있는 Object 이다.
모든 컴포넌트에게 theme 속성을 전달하는 역할을 한다.
ThemeProvider 를 import 해준뒤에, 공통 속성을 사용할 루트에 ThemeProvider로 감싸주면 된다.
import React from "react";
import ReactDOM from "react-dom/client";
import { ThemeProvider } from "styled-components";
import App from "./App";
const root = ReactDOM.createRoot(document.getElementById("root"));
const darkTheme = {
textColor: "white",
backgroundColor: "black",
};
root.render(
<React.StrictMode>
<ThemeProvider theme={darkTheme}>
<App />
</ThemeProvider>
</React.StrictMode>
);
위와 같이 ThemeProvider로 감싸주게 되면, App.js 내에서 theme 속성에 접근하여 사용 할 수 있다.
import styled from "styled-components";
const Wrapper = styled.div`
display: flex;
height: 100vh;
width: 100vw;
justify-content: center;
align-items: center;
background-color: ${(props) => props.theme.backgroundColor};
`;
const Title = styled.h1`
color: ${(props) => props.theme.textColor};
`;
function App() {
return (
<Wrapper>
<Title>Hello World !</Title>
</Wrapper>
);
}
export default App;