- npm install --save styled-components
- 요소에 대한 메소드를 가지고 있음.
- styled.button(), styled.button``처럼, 버튼은 styled객체의 메소드임!
<button type="submit" class="sc-bczRLJ dsImlA">Add Goal</button>
👉🏻 고유한 클래스 이름을 갖기 때문에, 여기서 설정한 스타일은 앱에 있는 다른 컴포넌트에 절대 영향을 주지 않음. 고유한 클래스 이름은 styled components별로 유효하기 때문.
const Button = styled.button`
display: inline-block;
border-radius: 3px;
padding: 0.5rem 0;
margin: 0.5rem 1rem;
width: 11rem;
background: transparent;
color: white;
border: 2px solid white;
`
const Button = styled.a`
&:focus {
outline: none;
}
&.invalid {
color: red;
}
`
<Button className={ !isValid && 'invalid' }>
Add Goal
</Button>
👉🏻 input요소에 값이 없는 상태로 추가할 경우 스타일링을 동적으로 변경하기 위해 조건부를 사용함.
const Button = styled.button`
...
color: white;
border: 2px solid ${props=> props.invalid ? 'red' : '#ccc'};
`
...
return( ...
<Button invalid={!isValid}>
...
</Button>
);
const Box = styled.div`
background-color: ${(props) => props.bgColor};
width: 100px;
height: 100px;
`
const Circle = styled(Box)`
border-radius: 50px;
`
...
return( ...
<Box bgColor="red"></Box>
);
const Button = styled.button`
background-color: ${(props) => props.bgColor};
width: 100px;
height: 100px;
`
...
return( ...
<Button bgColor="red">Login</Button>
<Button as="a" href="/" bgColor="blue">Login</Button>
);
👉🏻 a태그에 대한 HTML태그의 속성을 설정할 수 있음.
const Input = styled.input.attrs({required: true, minLength:10})`
background-color: tomato;
`
...
return( ...
<>
<Input />
<Input />
<Input />
</>
);
👉🏻 attrs({required: true})사용하여 객체에 추가한 속성을 해당 스타일 컴포넌트 속성으로 추가함
const Button = styled.button`
...
color: white;
border: 2px solid ${props=> props.invalid ? 'red' : '#ccc'};
@media (min-width: 768px)
`
👉🏻 미디어쿼리 조건에 충족하면 해당 스타일이 적용됨.
import styled, {keyframes} from 'styled-components';
keyframes
: 애니메이션 생성하여 등록const rotationAnimation = keyframes`
from {
transform: rotate(0deg);
} to {
transform: rotate(360deg);
}
`;
const Box = styled.div`
height: 100px;
width: 100px;
background-color: tomato;
animation: ${rotationAnimation} 1s linear infinite;
`;
const Emoji = styled.span`
font-size: 32px;
`;
const Box = styled.div`
height: 100px;
width: 100px;
background-color: tomato;
animation: ${rotationAnimation} 1s linear infinite;
${Emoji} {
&:hover{
font-size: 64px;
}
}
`;
return( ...
<Box>
<Emoji as="p">⭐️</Emoji>
</Box>
);
👉🏻 as프롭을 사용하여 tag name을 유동적으로 사용할 수 있다.