- 스타일을 자바스크립트 파일에 내장시켜 사용할 수 있습니다
- 재사용이 쉬운 CSS 커스텀 컴포넌트를 만들 수 있습니다
사전 준비
$ yarn add styled-components
추가import styled from 'styled-components';
를 추가해주기 -> styled
객체를 이용할 것이다!유용한 VScode 확장 프로그램
vscode-styled-components 를 이용하면 코드가 예뻐져요~!
const 상수명 = styled.스타일링하고싶은테그`
넣을 css 효과들
`;
//여기서 h1은 테그가 아니라 테그함수이고, 그 테그 안에 아래의 값을 넣는다는 의미를 갖는다
const Title = styled.h1`
font-size: 1.5em;
text-align: center;
color: palevioletred;
`;
function App() {
return <Title>Styled Components</Title>;
}
기본적으로 고정적인 값을 이용해 스타일링합니다.
//App.js
import React from "react";
import styled from "styled-components";
import Button from "./components/Button";
//Button테그는 재사용가능한 컴포넌트로부터 데려온다
//고정값을 가지고 스타일링 함
const AppBlock = styled.div`
width: 512px;
margin: 0 auto;
margin-top: 4rem;
border: 1px solid black;
padding: 1rem;
`;
function App() {
return (
<AppBlock>
<Button>Button</Button>
</AppBlock>
);
}
export default App;
//Button.js
//스타일이 적용된 Button 컴포넌트를 어디서든 import해서 사용할 수 있다!
import React from "react";
import styled from "styled-components";
const StyleButton = styled.button`
/* 공통 스타일 */
display: inline-flex;
outline: none;
border: none;
border-radius: 4px;
color: white;
font-weight: bold;
cursor: pointer;
padding-left: 1rem;
padding-right: 1rem;
`;
function Button({ children, ...rest }) {
console.log({ children }); //{children: "Button"}
console.log({ ...rest }); //{} (빈 객체--props가 딱히 없으므로)
return <StyleButton {...rest}>{children}</StyleButton>;
}
export default Button;
<Button>Button</Button>
children
, 속성들은 ...rest
에 저장StyleButton
함수를 적용시켜서 부모한테 보냄가변 스타일링에는 props를 사용한다! (여기서 props는 property 느낌이다!)
import styled, { css } from "styled-components";
를 잊지 말 것!!import React from "react";
import styled, { css } from "styled-components";
//div테그를 스타일링해서 Circle컴포넌트에 넣음
//Circle컴포넌트에 color라는 props를 줌
const Circle = styled.div`
width: 5rem;
height: 5rem;
background: ${(props) => props.color || "black"};
border-radius: 50%;
${(props) =>
props.huge &&
css`
width: 10rem;
height: 10rem;
`}
`;
// 여러 줄의 css코드를 조건 식으로 넘김
function App() {
return <Circle color="blue" huge />;
}
export default App;
-> Tagged Template Literal 문법을 통해 props의 값을 ${}로 감싸 읽어들일 수 있습니다!
<참고: Tagged Template Literal 문법이란?>
const red = "빨간색";
const blue = "파란색";
function favoriteColors(texts, ...values) {
console.log(texts);
console.log(values);
}
favoriteColors`제가 좋아하는 색은 ${red}과 ${blue}입니다.`;
//Button.js
import React from "react";
import styled, { css } from "styled-components";
//size를 제어
const sizeStyles = css`
${(props) =>
props.size === "large" &&
css`
height: 3rem;
font-size: 1.25rem;
`}
${(props) =>
props.size === "medium" &&
css`
height: 2.25rem;
font-size: 1rem;
`}
${(props) =>
props.size === "small" &&
css`
height: 1.75rem;
font-size: 0.875rem;
`}
`;
const StyleButton = styled.button`
/* 공통 스타일 */
display: inline-flex;
outline: none;
border: none;
border-radius: 4px;
color: white;
font-weight: bold;
cursor: pointer;
padding-left: 1rem;
padding-right: 1rem;
/* 크기 */
${sizeStyles}
`;
function Button({ children, size, ...rest }) {
return (
<StyleButton size={size} {...rest}>
{children}
</StyleButton>
);
}
export default Button;
//App.js
import React from "react";
import styled from "styled-components";
import Button from "./components/Button";
//Button테그는 재사용가능한 컴포넌트로부터 데려온다
//고정값을 가지고 스타일링 함
const AppBlock = styled.div`
width: 512px;
margin: 0 auto;
margin-top: 4rem;
border: 1px solid black;
padding: 1rem;
`;
function App() {
return (
<AppBlock>
<Button size="large">Button</Button>
<Button size="small">Button</Button>
<Button size="medium">Button</Button>
</AppBlock>
);
}
export default App;
const 확장스타일컴포넌트이름 = styled(상속받을스타일컴포넌트)`추가할 코드 작성`;
const StyleButton = styled.button`
/* 공통 스타일 */
display: inline-flex;
outline: none;
border: none;
border-radius: 4px;
color: white;
font-weight: bold;
cursor: pointer;
padding-left: 1rem;
padding-right: 1rem;
`;
//StyleButton값은 자동으로 세팅이 되어 있는 상태에서 새로운 스타일을 추가할 수 있다!
const RedButton = styled(Stylebutton)`
color: red;
`
기본적인 styled-components를 정리해보았는데, 사실 이 뿐만 아니라 활용할 수 있는 것들이 정말정말 많습니다! animation, Global Theme, Nesting 등등 수많은 활용할 수 있는 것들이 있으니까 실제로 필요할 때 찾아서 이용해보면 좋을 것 같습니다!
레퍼런스는 쿠키파킹을 통해 볼 수 있습니다~!
너무 잘 읽었습니다 ㅎㅎ
다른 글도 그렇고 다른 사람을 쉽게 이해시키고, 깔끔하게 정리하시는 능력이 있으신 것같아요!