웹/React

[React] React CSS 방법을 선택해보자! - Styled-Components

leebaek 2025. 3. 16. 14:12

 

iOS에 이어 리액트에도 발을 들이게 되었는데요 !! 

캡스톤에서 iOS 대신 리액트를 써 개발을 해보려구 해요. 🥹 ( 도전 ~ )

아직까진 간단한 컴포넌트 만드는 정도만 할 줄 알아요. . . ㅋㅋ

 

오늘은 CSS 방법 중 하나인 Styled-Components에 대해 포스팅 해보려구 합니다.


 

■ Styled-Components란 ?

Styled-Components 선택 이유

■ 반응형 스타일 적용하는 방법


Styled-Components란 ?

CSS-in-JS 방식의 스타일링 라이브러리로, JavaScript 코드 내에서 직접 CSS를 작성할 수 있습니다.

 

✔️ CSS-in-JS 방식

  • CSS 코드를 별도의 .css 파일에 작성하지 않고, JavaScript 코드 내에서 직접 작성할 수 있음
  • 컴포넌트별로 스타일을 캡슐화하여 관리 가능

✔️ 컴포넌트 기반 스타일링

  • 스타일이 해당 컴포넌트에 국한되어 적용되므로 전역 스타일 충돌 방지
  • 재사용이 용이하고, 유지보수가 쉬움

✔️ 동적 스타일링 가능

  • props를 활용하여 동적으로 스타일을 변경 가능
  • theme을 적용하여 전체적인 스타일 관리 가능

✔️ 반응형 스타일 쉽게 적용

  • @media 쿼리를 활용하여 반응형 스타일을 간편하게 적용 가능
더보기

👉 작은 프로젝트에서는 성능 차이가 크지 않지만, 대규모 프로젝트에서는 성능 최적화를 반드시 고려해야 함!
👉 기본적인 스타일(예: Layout, Reset)은 CSS 파일로 관리하고, 변경이 필요한 부분에만 styled-components를 사용하면 최적의 성능을 유지할 수 있음! 


■ 왜 많고 많은 방법 중 Styled-Components를 선택했나 ?!

전 SwiftUI가 익숙하기 때문입니다 ..  😵

 

SwiftUI에선 컴포넌트에 바로 스타일을 적용하는 방식을 사용합니다.

 

이걸 선언형 UI(Declarative UI)라고 하는데,

.font(), .foregroundColor(), .padding() 같은 모디파이어(Modifier) 를 체인처럼 연결해서 뷰의 스타일을 선언하는 방식입니다.

 

예시 코드를 보여드리자면,

Text("안녕하세요. SwiftUI~ ")
	.frame(width: 100)
	.foregroundColor(Color.red)
    	.padding(10)
        
Text("SwiftUI는 처음이시죠?")
	.frame(width: 100)
	.foregroundColor(Color.red)
    	.padding(10)

 

보통 CSS는 HTML과 분리되어 .css 파일로 관리하잖아요.

전 그 방식이 손에 잘 안 익더라구요.

 

클래스, 아이디 이름을 짓는 것도,

HTML, css 파일 왔다 갔다 하며 작업하는 것도 번거로웠구요. 

( + 중복될까봐 걱정됨, 나중에 수정하려고 해도 뭐였는지 기억이 안 나서 잘 못 찾음 .. 😢  )

 

그래서 선언형 UI(Declarative UI)와 가장 유사한 CSS 방식인

 'styled-components' 를 선택하게 되었습니다.

 

간단한 예시 코드 보여드릴게요 !

import React from "react";
import styled from "styled-components";

// Styled Component 정의
const StyledText = styled.p`
  width: 100px;
  color: red;
  padding: 10px;
`;

function App() {
  return (
    <div>
      <StyledText>안녕하세요.</StyledText>
      <StyledText>React는 처음이에요.</StyledText>
    </div>
  );
}

export default App;

 

+ 추가로, 인라인 스타일도 선언형UI와 비슷했는데요.

인라인 스타일은 재사용이 안되고, Styled-Components는 재사용성 가능해 선택하였습니다 !

 

( 다른 CSS 방식과 비교할 수 있게 표로 정리해두었습니다 ~ )

스타일 적용 방식 특징
인라인 스타일 컴포넌트 내부에서 스타일 직접 지정
CSS 파일 (Traditional CSS) .css 파일을 분리해서 사용
CSS Modules 모듈화를 통해 클래스명을 고유하게 적용
✨ Styled-Components (CSS-in-JS) 스타일을 JS 코드 내부에서 선언적으로 적용
Tailwind CSS 클래스명을 조합하여 스타일을 적용

■ 반응형 스타일 적용하는 방법

미디어 쿼리를 변수로 관리하여 스타일 적용하는 방법이에요!

 

자세한 설명과 사용방법은 다른 포스팅에서 다루도록 하겠습니다

const sizes = {
  mobile: "480px",
  tablet: "768px",
  desktop: "1024px"
};

const device = {
  mobile: `(max-width: ${sizes.mobile})`,
  tablet: `(max-width: ${sizes.tablet})`,
  desktop: `(max-width: ${sizes.desktop})`
};

const Title = styled.h1`
  font-size: 2rem;
  color: black;

  @media ${device.tablet} {
    font-size: 1.5rem;
    color: blue;
  }

  @media ${device.mobile} {
    font-size: 1.2rem;
    color: red;
  }
`;

const App = () => {
  return <Title>반응형 텍스트</Title>;
};

export default App;