styled 함수를 이용해 기본 태그를 선택하고, css코드를 css문법에 맞게 작성하여 전달하는 방식
npm install styled-components
const Circle = styled.div`
width: 250px;
height: 250px;
background-color: orange;
border-radius: 50%;
`;
const App = () => {
return (
<>
<Circle />
</>
);
};
1단계 Circle이라는 컴포넌트를 생성
2단계 해당 컴포넌트에 styled를 이용 div 태그를 만듦
styled.div(html태그 어떤거든 상관없음) `
백틱 안에 css 코드
`
3단계 백틱(``) 안에 css를 작성
4단계 css가 완료된 컴포넌트를 div 태그 대신해 가져다 쓴다
1단계 tagged template literal 형식의 styled 컴포넌트 생성
const AnimatedBox = styled.div`
width: 300px;
height: 300px;
background: tomato;
`
2단계 keyframes 태그 컴포넌트 생성(이름이 반드시 있어야 함 그래야 요소에 맵핑 가능)
const boxFade = keyframes`
0% {
opacity: 1;
}
50% {
opacity: 0;
}
100% {
opacity: 1;
}
`;
3단계 styled 컴포넌트에 animation 추가 그리고 반드시 duration이 필수임
animation: ${boxFade} 2s 1s infinite linear alternate;
// 2s는 duration
4단계 완성코드보기
const boxFade = keyframes`
0% {
opacity: 1;
}
50% {
opacity: 0;
}
100% {
opacity: 1;
}
`;
const AnimatedBox = styled.div`
width: 300px;
height: 300px;
background: tomato;
animation: ${boxFade} 2s 2s infinite linear alternate;
`;
const Eyes = styled.div`
display: flex;
justify-content: center;
`;
const Eye = styled.div`
width: 200px;
height: 200px;
border: 5px solid black;
border-radius: 50%;
position: relative;
`;
const Eyelid = styled.div`
width: 205px;
height: 100px;
background-color: #000000;
border: 1px solid black;
border-radius: 150px 150px 0 0;
position: absolute;
left: -2%;
`;
const moving = keyframes`
0%{
top: 40%;
left: 10%;
}
100%{
top: 40%;
left: 70%;
}
`;
const Ball = styled.div`
width: 40px;
height: 40px;
background-color: #000000;
border-radius: 50%;
position: absolute;
animation: ${moving} 3s 0s linear alternate infinite;
`;
화면 크기에 따라 반응함
1. 기본
@media screen {
css코드
}
2. 크기 설정
@media screen and (min-width: 최소) {
css코드
}
const ResponsiveBox = styled.div`
width: 100px;
height: 100px;
background-color: red;
@media screen and (min-width: 600px) {
width: 200px;
height: 200px;
background-color: green;
}
@media screen and (min-width: 900px) {
width: 300px;
height: 300px;
background-color: blue;
}
`;