[React] Styled Components 사용하기

2025. 4. 23. 13:38·Programming/React
728x90
반응형

 

이 글은 Udemy의 【한글자막】 React 완벽 가이드 2025 with React Router & Redux 를 수강하고 정리한 내용입니다.

 

styled-component 는 CSS-in-JS 방식을 사용하는 라이브러리입니다.

말 그대로 CSS 코드를 자바스크립트 안에 작성할 수 있게 해줍니다. 그리고 중요한 건, 작성한 스타일이 해당 컴포넌트에만 적용된다는 점입니다.

즉, 스타일이 자동으로 스코프(scope)되어 다른 컴포넌트와 충돌하지 않도록 해줍니다.

styled-component 설치

npm install styled-components

사용 방법 예시

// Button.jsx
import styled from 'styled-components';

const StyledButton = styled.button`
  background-color: #4caf50;
  color: white;
  padding: 10px 16px;
  border: none;
  border-radius: 5px;
  cursor: pointer;

  &:hover {
    background-color: #45a049;
  }
`;

function Button({ children }) {
  return <StyledButton>{children}</StyledButton>;
}

export default Button;

이렇게 하면 StyledButton은 내부적으로 고유한 클래스명을 생성하고, 이 스타일은 다른 컴포넌트와 절대 충돌하지 않습니다. 마치 컴포넌트 하나하나가 스타일 영역을 가지는 것처럼 작동합니다.

props로 동적 스타일 처리하기

styled-components는 props를 받아서 CSS 값을 동적으로 지정할 수 있습니다.

const Input = styled.input`
  background-color: ${({ invalid }) => $invalid ? "#fed2d2" : "#d1d5db"};
  color: ${({ invalid }) => $invalid ? "#ef4444" : "#374151"};
`

<Input $invalid={emailNotValid} />

이런 방식으로 유효성 검증에 따라 스타일을 다르게 보여줄 수 있어 사용자 경험을 향상시킬 수 있습니다.

💡$ 접두사는 왜 쓰는 걸까? styled-components는 $로 시작하는 props는 자동으로 필터링해서 DOM에 전달하지 않도록 처리해줍니다. $invalid는 오직 스타일링에서만 사용되고, 실제 HTML 속성에는 포함되지 않기 때문에 불필요한 경고 없이 안전하게 스타일을 제어할 수 있습니다.

중첩 스타일, @media, hover 등의 사용법

styled-components는 일반 CSS 문법을 거의 그대로 사용할 수 있기 때문에, 다음과 같은 고급 기능들도 자연스럽게 적용할 수 있습니다.

✅ 중첩 선택자 (&)

const Header = styled.header`
  padding: 2rem;
  background-color: #f0f0f0;

  & h1 {
    font-size: 2rem;
    margin-bottom: 1rem;
  }

  & p {
    color: #555;
  }
`

&는 해당 styled 컴포넌트 자신을 가리킵니다. 위 예제는 Header 안의 h1과 p에 각각 스타일을 주는 방법입니다.

✅ 미디어 쿼리 (@media)

const Header = styled.header`
  margin-bottom: 2rem;

  @media (min-width: 768px) {
    margin-bottom: 4rem;
  }
`

스크린 크기에 따라 스타일을 다르게 적용할 수 있습니다. 일반 CSS에서 하던 방식 그대로 작성하면 됩니다.

✅ Pseudo 선택자 (예: :hover, :focus)

const Button = styled.button`
  background-color: #4caf50;
  color: white;

  &:hover {
    background-color: #45a049;
  }
`

hover 상태도 마찬가지로 &:hover와 같이 작성하면 됩니다. &는 항상 해당 요소 자신을 의미합니다. 빈칸 없이 이어서 써야 pseudo 선택자로 인식됩니다.

장점

  • 스타일 충돌 걱정 X: 자동으로 고유 클래스 생성
  • props로 동적 스타일 처리 가능
  • 컴포넌트 기반의 스타일링
  • 기존 CSS 문법 대부분 사용 가능
  • 구조화된 스타일 관리가 쉬움

주의할 점

  • 런타임에서 CSS를 처리하므로, 매우 큰 프로젝트에서는 퍼포먼스 이슈 가능성 있음
  • CSS가 JS 내부에 있어 초반엔 낯설 수 있음

 


도움이 되셨다면 ❤️ 좋아요와 댓글로 피드백 주세요!

궁금한 점이 있다면 언제든지 질문 환영입니다 😄

지금까지 읽어주셔서 감사합니다!

반응형

'Programming > React' 카테고리의 다른 글

[React] 리액트 컴포넌트 스타일링  (1) 2025.04.23
[React] Tailwind 사용하여 스타일링 하기  (0) 2025.04.23
[React] CSS Module 사용하기  (0) 2025.04.23
[React] style Prop 사용하여 Inline(인라인)으로 css 적용하기  (0) 2025.04.23
[React] 커스텀 훅(Custom Hook)  (0) 2025.04.22
'Programming/React' 카테고리의 다른 글
  • [React] 리액트 컴포넌트 스타일링
  • [React] Tailwind 사용하여 스타일링 하기
  • [React] CSS Module 사용하기
  • [React] style Prop 사용하여 Inline(인라인)으로 css 적용하기
제가안난데여♪(´ε`*)
제가안난데여♪(´ε`*)
기억의 유한함을 기록의 무한함으로 ✍️ 예비 개발자가 꿈꾸는 공간 여기는 안나의 개발 블로그 💻
  • 제가안난데여♪(´ε`*)
    안나의 전두엽 어딘가 🧠
    제가안난데여♪(´ε`*)
    기억의 유한함을 기록의 무한함으로 ✍️ 예비 개발자가 꿈꾸는 공간 여기는 안나의 개발 블로그 💻
  • 전체
    오늘
    어제
    • 분류 전체보기 (128)
      • 간단하게 한스푼🥄 (1)
      • Programming (56)
        • Spring (16)
        • Vue.js (6)
        • Deep Learning (3)
        • DataBase (5)
        • React (26)
      • DevOps (21)
        • Docker (12)
        • Linux (4)
      • Algorithm (46)
        • 알고리즘 정리 (5)
        • 자료구조 (0)
        • PS - 백준 (28)
        • 99클럽 코테 스터디 (13)
      • Project (0)
        • CampFire (0)
      • 안나의 취뽀일기 (˵ •̀ ᴗ - ˵ ) ✧ (4)
        • SSAFY_9기 (2)
        • SW 부트캠프 (2)
  • 잔디 달력

    «   2026/01   »
    일 월 화 수 목 금 토
    1 2 3
    4 5 6 7 8 9 10
    11 12 13 14 15 16 17
    18 19 20 21 22 23 24
    25 26 27 28 29 30 31
  • 인기 글

  • 태그

    백준 java
    Vue
    java
    알고리즘
    stack
    Vue.js
    topology sort
    greedy
    Spring
    99클럽
    도커컨테이너
    linux
    java stack
    springboot
    자바
    docker
    코딩테스트 준비
    java 백준
    백준 구현문제
    자바 스택
    항해99
    til
    백준
    도커
    리액트 상태
    front-end
    React
    Vue.js 입문하기
    김영한
    개발자 취업
  • 01-24 06:09
    반응형
  • hELLO· Designed By정상우.v4.10.3
제가안난데여♪(´ε`*)
[React] Styled Components 사용하기
상단으로

티스토리툴바