리액트

styled-components란?

Irene1988 2025. 4. 20. 19:59

리액트 사용할때 그냥 생각없이 사용했었는데, 이번에 열심히 그 개념과 내용들을 찾아보고 정리를 해둔다.

 

🎨 styled-components란?

styled-components

CSS를 JavaScript 안에 작성할 수 있게 해주는 라이브러리

즉, CSS 파일 따로 안 만들고,
컴포넌트 안에서 바로 스타일을 적용할 수 있다.

✅ 특징:

  • 컴포넌트 단위로 스타일을 묶을 수 있어 → 코드 깔끔
  • 클래스 이름 충돌 걱정 없음 → 자동으로 고유 클래스 생성
  • props로 스타일 제어 가능 → 동적인 스타일 만들기 쉬움

🛠️ 설치 방법

Next.js 프로젝트에 styled-components 설치하려면:

yarn add styled-components

(이번 개인 실습용 프로젝트는 그냥 yarn으로 프로젝트를 설치했다.)

 

(또는 npm이라면 npm install styled-components)

그리고 추가로 SSR(서버사이드 렌더링) 최적화를 위해 babel-plugin-styled-components도 설치하는 걸 추천:

yarn add -D babel-plugin-styled-components

 

(개발용(-D)로 설치)

그 다음 .babelrc 파일을 루트에 만들어서 이렇게 추가해:

{
  "presets": ["next/babel"],
  "plugins": [["styled-components", { "ssr": true }]]
}

✅ 여기까지 하면 준비 완료!


✨ 사용 예시

기존에 CSS 쓰던 방식

export default function Home() {
  return (
    <div className="title">
      Hello Next.js!
    </div>
  );
}
/* styles.css */
.title {
  font-size: 24px;
  color: blue;
}

styled-components로 쓰면?

import styled from 'styled-components';

const Title = styled.h1`
  font-size: 24px;
  color: blue;
`;

export default function Home() {
  return (
    <div>
      <Title>Hello Next.js with styled-components!</Title>
    </div>
  );
}

✅ 정리:

  • styled.h1 처럼 HTML 태그를 감싸서
  • CSS 코드를 JavaScript 코드 안에 바로 작성하는 거야!

📦 다양한 styled-components 사용법

✅ 1. 태그 변경

const Button = styled.button`
  background: green;
  color: white;
  padding: 10px;
`;

 

✅ 2. props로 스타일 다르게 주기

const Button = styled.button`
  background: ${props => (props.primary ? "blue" : "gray")};
  color: white;
  padding: 10px;
`;

export default function Home() {
  return (
    <div>
      <Button>기본 버튼</Button>
      <Button primary>프라이머리 버튼</Button>
    </div>
  );
}
  • primary props를 줄 때만 파란색 배경!

📢 styled-components 왜 많이 쓰냐?

이유 설명
컴포넌트 단위 스타일 관리 기능별로 스타일 분리 가능
클래스 충돌 없음 고유한 클래스명 자동 생성
동적 스타일링 props로 조건부 스타일링 가능
SSR 최적화 가능 Next.js 같은 서버사이드 렌더링에도 대응 가능

 

🎯 요약

질문 답변
styled-components란? JavaScript 안에서 CSS를 작성하는 방법
설치는? yarn add styled-components
어떻게 써? styled.h1``... 식으로 작성
장점은? 깔끔한 코드, 컴포넌트 스타일 관리, 충돌 방지

 

'리액트' 카테고리의 다른 글

axios VS fetch 비교와 차이  (1) 2025.04.20
Node.JS  (0) 2025.04.19
useCallback vs useMemo 개념  (0) 2025.04.18