npm
npm i styled-components
yarn
yarn add styled-components
import
<.jsx>
import styled from "styled-components";
styled.{태그 이름}``
이 기본 형태이다vscode-styled-components
를<DefaultButton.jsx>
import styled from "styled-components";
const Box = styled.div`
display: flex;
justify-content: center;
align-items: center;
`
const DefaultBtn = styled.button`
padding: 1rem;
width: fit-content;
background-color: #1f1f1f;
`
// 컴포넌트 함수
export function DefaultButton() {
~~~
}
<DefaultButton.jsx>
import styled from "styled-components";
const Box = styled.div`
display: flex;
justify-content: center;
align-items: center;
`
const DefaultBtn = styled.button`
padding: 1rem;
width: fit-content;
background-color: #1f1f1f;
`
export function DefaultButton() {
<>
<Box>
<DefaultBtn>기본 버튼</DefaultBtn>
</Box>
</>
}
$
를 붙여야 한다.$
를 붙이지 않은 props를const Box = styled.div`
display: flex;
justify-content: center;
align-items: center;
`
// $를 안 붙이고 prop을 전달하면
<Box backgroundColor="red">
// 브라우저가 볼 때 div의 attribute로 인식
<div backgroundColor="red">
백틱(``)
안에서${(props) => props.이름}
으로 사용예). props
를 사용하여 빨간색 border
를 적용해보자.
<DefaultButton.jsx>
import styled from "styled-components";
const Box = styled.div`
display: flex;
justify-content: center;
align-items: center;
border: 1px solid ${(props) => props.$borderColor} // props 사용
`
const DefaultBtn = styled.button`
padding: 1rem;
width: fit-content;
background-color: #1f1f1f;
`
export function DefaultButton() {
<>
<Box $borderColor = "red"> // Box 컴포넌트에 props 전달
<DefaultBtn>기본 버튼</DefaultBtn>
</Box>
</>
}
예). props에 따라 다른 색과 내용을 가진 상자를 생성
<StyledVelog.jsx>
import React from "react";
import styled from "styled-components";
const Box = styled.div`
width: fit-content;
height: fit-content;
padding: 1rem;
border-radius: 5px;
margin-block: 1rem;
border: 3px solid ${(props) => props.$borderColor};
`;
const ColorBtn = styled.button`
padding: 0.5rem;
width: fit-content;
border-radius: 5px;
background-color: ${(props) => props.$backgroundColor};
color: white;
`;
// 상자에 전달할 props
const boxColor = ["red", "blue", "green"];
// 색깔에 따라 상자 안의 내용을 return 하는 함수
const getBoxName = (color) => {
switch (color) {
case "red":
return "빨간 상자";
case "blue":
return "파란 상자";
case "green":
return "초록 상자";
default:
return "빈 상자";
}
};
export default function StyledVelog() {
return (
<>
// 색상이 담긴 Array를 활용하여 반복적인 UI 생성
{boxColor.map((color) => {
return (
// 색상에 따른 CSS와 내용을 다르게
<Box $borderColor={color}>
<ColortBtn>{getBoxName(color)} 버튼</DefaultBtn>
</Box>
);
})}
</>
);
}
&:
를 사용하여 Pseudo 선택자 사용const DefaultBtn = styled.button`
padding: 0.5rem;
width: fit-content;
border-radius: 5px;
background-color: ${(props) => props.$backgroundColor};
color: white;
&:hover {
color: black;
}
`;