설치
$ npm i styled-components *// JavaScript 라이브러리*
$ npm i @types/styled-components *// TypeScript 라이브러리 (위 아래 둘 다 설치)*
기본 사용방법
import styled from 'styled-components';
const Boxes = styled.div`
display: flex;
height: 100vh;
margin: 0;
padding: 0;
box-sizing: border-box;
background-color: #38423C;
`;
<Boxes></Boxes>
props를 통해 property에 값 할당 ( JavaScript & TypeScript ) - 1
*// in JavaScript*
const Box = styled.div`
width: 100px;
height: 100px;
background-color: ${(props) => props.bgColor};
// props 값 상호작용 가능 (변수 바인딩을 위해 Arrow function 사용)
`;
<Box bgColor="tomato"></Box>
// in TypeScript
const Box = styled.div<{boColor: string}>`
width: 100px;
height: 100px;
background-color: ${(props) => props.bgColor};
`;
<Box bgColor="tomato"></Box>
Callback 함수로 선언하여 매개변수에 props를 포함 시켜서 property에 할당한다.
Scss의 @extend와 비슷한 기능 - 2
const Box = styled.div`
width: 100px;
height: 100px;
background-color: black;
`;
const Circle = styled(Box)`
border-radius: 50%;
background-color: white; // 속성 오바라이딩 됨
`;
Box에 선언된 property 를 그대로 가져와서 사용이 가능한 방법입니다.
태그 요소를 변경하는 ‘트릭’ - 3
const Btn = styled.button`
width: 50px;
height: 20px;
background-color: tomato;
border: none;
border-radius: 4px;
`;
<Btn as="a"></Btn>
다음과 같이 해당 컴포넌트 요소에 as 속성을 사용하면, 기존에 <button>
태그를 지정된 <a>
태그로 변경할 수 있다.
태그 요소의 속성을 섹시하게 변경하는 ‘트릭’ - 4
const Input = styled.input.attrs({ required: true })`
width: 100px;
height: 20px;
background-color: skyblue;
`;
attrs()
함수를 사용하여 해당 컴포넌트의 속성을 변경할 수 있다.
애니메이션 keyframe 만들기 - 5
import { keyframes } from 'styled-components';
const animationSetting = keyframes`
0% {
transform: rotate(0deg);
}
100% {
transform: rotate(365deg);
}
`;
const AniBox = styled.div`
width: 100px;
height: 100px;
background-color: white;
animation: ${animationSetting} 5s linear infinite;
`;
Scss와 비슷한 방식의 후손 선택자 선언방식 - 6
const Emoji = styled.a`
font-size: 20px;
`;
const Boxs = styled.div`
width: 100px;
height: 100px;
background-color: white;
display: flex;
justify-content: center;
align-items: center;
// 해당 컴포넌트 자손으로 존재하는 태그 중, styled-components 가 아닌 일반 선택자 선언방식
span {
font-size: 20px;
&:hover {
font-size: 30px;
}
&:active {
opacity: 0;
}
}
// 해당 컴포넌트 자손으로 존재하는 태그 중, styled-components 인 선택자 선언방식
${Emoji} {
&:hover {
font-size: 30px;
}
&:active {
opacity: 0.5;
}
}
`;
<Boxs>
<span>🙂</span>
<Emoji>🔥</Emoji>
</Boxs>
후손 선택자의 장점
→ target(부모태그) 의 자손인 경우에만 새롭게 선언된 속성이 적용되고, 밖의 기존 Emoji의 속성은 그대로 이다.
컴포넌트 태그로 후손선택자 선언 시 장점
→ 태그의 요소가 span 에서 a 바뀌어도 상관없이 동작한다. (태그요소에 자유롭다.)