Study/React

[React] Styled components

this_is_mins 2023. 9. 9. 14:53

💡 styled components 란?

JavaScript와 React 또는 React Native를 사용하여

웹 및 모바일 애플리케이션의 스타일을 관리하기 위한 라이브러리!

 

CSS를 JavaScript 파일 내부에 직접 작성하는 방식으로 스타일을 정의하고 적용

 

✅ 장점

- styled-components를 사용하면 스타일을 컴포넌트 수준에서 정의할 수 있음

  각 컴포넌트에 대한 스타일을 독립적으로 정의하고 재사용할 수 있음

- 컴포넌트와 스타일을 논리적으로 그룹화하고 관리할 수 있음

 


패키지 설치

$ npm i styled-components

 

💡 사용 방법

import styled from "styled-components";

styled-components를 import 해줘야 한다

 

- styled.tagName로  선언해주고 안에 원하는 css를 작성하면 된다

- HTML 엘리먼트를 스타일링 할 때는 모든 알려진 HTML 태그에 대해서 이미 속성이 정의되어 있기 때문에

해당 태그명의 속성에 접근한다

 

import styled from "styled-components";

const Wrapper = styled.div`
  display: flex;
  justify-content: center;
  align-items: center;
  width: 100%;
  height: 15vh;
`;

const BoxOne = styled.div`
  background-color: #cf6a87;
  width: 100px;
  height: 100px;
`;

const BoxTwo = styled.div`
  background-color: #574b90;
  width: 100px;
  height: 100px;
`;

const App = () => {
  return (
    <Wrapper>
      <BoxOne />
      <BoxTwo />
    </Wrapper>
  );
};



export default App;

요소들을 감싸주는 Wrapper와 BoxOne,BoxTwo를 선언해주었다

그치만 같은 weight,height를 갖는 Box를 두번 선언하게 되는 번거로움이 발생!!

 

const Box = styled.div`
  background-color: ${(props) => props.bgColor};
  width: 100px;
  height: 100px;
`;

const App = () => {
  return (
    <Wrapper>
      <Box bgColor={"#cf6a87"} />
      <Box bgColor={"#574b90"} />
    </Wrapper>
  );
};

 

props를 통해 각각의 컴포넌트마다 원하는 속성을 적용할 수 있다!

위의 경우 background-color를 props로 받아 색상만 변경시킬 수 있다

 

as 속성

const App = () => {
  return (
    <Wrapper>
      <Box bgColor={"#cf6a87"} />
      <Box as="button" bgColor={"#574b90"} />
    </Wrapper>
  );
};

as 속성을 이용해 <div>로 감싸진 태그를 버튼으로도 활용이 가능하다!

이렇게 하면 재활용이 용이해진다

 

Keyframes으로 에니메이션 효과 주기

import {keyframes} from "styled-components";

keyframes를 import 해준다

const CircleAnimation = keyframes`
  0% {
    background-color: #FFC0C0;
  }
  33% {
    background-color: #FF9E9E;
  }
  66% {
    background-color: #FF5656;
  }
  100% {
    background-color: #FF6F6F;
  }
`;

시간에 따라 배경색이 변경되는 CircleAnimation이라는 keyframes를 정의한다

const Circle = styled(Box)`
  border-radius: 50%;
  animation: ${CircleAnimation} 3s linear infinite;
`;

이 컴포넌트는 Box 컴포넌트를 확장하며 border-radius 속성을 사용하여 원 모양으로 만들고,

CircleAnimation 애니메이션을 적용하여 배경색이 변화하도록 한다

그리고 애니메이션은 3초 동안 반복하게 해주었습니다

const App = () => {
  return (
    <Wrapper>
      <Circle bgColor={"red"} />
    </Wrapper>
  );
};

결과!!