9_CSS 리액트에 넣는 5가지 방법
코드 블록의 Try it Yourself 버튼으로 직접 실행할 수 있다.
구문
1. Inline Style(인라인 스타일) — 태그 안에 직접 쓰기
1.1 개념
HTML(에이치티엠엘)에서 style="color:red" 처럼 태그 안에 스타일을 직접 쓰는 방식이다.
리액트에서는 문자열이 아닌 객체(Object, 오브젝트) 형태로 작성한다.
1.2 기본 예제
function App() {
return (
<h1 style={{ color: "tomato", fontSize: "32px" }}>
🍅 맛있는 리액트!
</h1>
);
}
| 줄 | 설명 |
|---|---|
| 3 | style={{ ... }} — 바깥 {}는 JSX 표현식, 안쪽 {}는 객체를 나타낸다. |
| 3 | color: "tomato" — 색상을 문자열로 지정한다. |
| 3 | fontSize: "32px" — font-size를 카멜케이스로 바꿔 쓴다. |
1.3 변수로 분리하기 (추천)
function App() {
const titleStyle = {
color: "tomato",
fontSize: "32px",
};
return <h1 style={titleStyle}>🍅 맛있는 리액트!</h1>;
}
| 줄 | 설명 |
|---|---|
| 2~5 | 스타일을 변수 titleStyle에 저장한다. 코드가 길어질수록 이 방식이 읽기 편하다. |
| 7 | style={titleStyle} — 변수를 바로 넣는다. 중괄호가 한 쌍만 있으면 된다. |
인라인 스타일은 작은 컴포넌트(component, 컴포넌트)에 빠르게 스타일을 줄 때 유용하다. 하지만 스타일이 많아지면 코드가 지저분해지므로 규모가 커지면 다른 방법을 사용한다.
2. CSS File(씨에스에스 파일) — 별도 파일로 분리하기
2.1 개념
.css 파일을 따로 만들고, 컴포넌트 파일에서 import(임포트) 해서 사용하는 방식이다.
가장 기본적이고 익숙한 방법이다.
2.2 파일 구조
src/
├── App.jsx
└── App.css
2.3 App.css 작성
.title {
color: royalblue;
font-size: 32px;
}
.card {
background-color: #f0f4ff;
border-radius: 8px;
padding: 16px;
}
| 줄 | 설명 |
|---|---|
| 1 | .title — 클래스(class, 클래스) 선택자(selector, 셀렉터)로 스타일 규칙을 정의한다. |
| 6 | .card — 카드 영역에 적용할 스타일 묶음이다. |
2.4 App.jsx 작성
import "./App.css";
function App() {
return (
<div className="card">
<h1 className="title">🎮 게임 점수판</h1>
</div>
);
}
| 줄 | 설명 |
|---|---|
| 1 | import "./App.css" — CSS 파일을 불러온다. |
| 5 | className="card" — HTML의 class 대신 className 을 쓴다. 리액트 규칙이다. |
리액트에서는 class 대신 반드시 className을 사용해야 한다. class는 JavaScript의 예약어이기 때문이다.
3. CSS Module(씨에스에스 모듈) — 클래스 이름 충돌 방지
3.1 개념
파일 이름을 이름.module.css 로 저장하면, 클래스 이름이 자동으로 고유하게 변환된다.
여러 컴포넌트에서 같은 클래스 이름을 써도 서로 충돌하지 않는다.
3.2 파일 구조
src/
├── Score.jsx
└── Score.module.css
3.3 Score.module.css 작성
.box {
background-color: #fff3cd;
padding: 20px;
border-radius: 12px;
}
.name {
color: #333;
font-weight: bold;
}
3.4 Score.jsx 작성
import styles from "./Score.module.css";
function Score() {
return (
<div className={styles.box}>
<p className={styles.name}>🏆 1등: 망고</p>
</div>
);
}
| 줄 | 설명 |
|---|---|
| 1 | import styles from "..." — CSS 모듈을 객체로 불러온다. |
| 5 | styles.box — 객체의 속성처럼 클래스 이름에 접근한다. |
| 6 | styles.name — 자동으로 고유한 클래스명으로 변환된다. |
실제로 브라우저에서 확인하면 클래스 이름이 Score_box__xK2jA 처럼 변환되어 있는 것을 볼 수 있다. 이것이 충돌을 막아 주는 원리이다.
4. Styled-Components(스타일드 컴포넌트) — JS 안에서 CSS 쓰기
4.1 개념
CSS를 JavaScript 코드 안에 문자열로 작성하는 방식이다. 컴포넌트와 스타일이 한 파일에 있어서 관리가 편하다.
4.2 설치
npm install styled-components
4.3 기본 예제
import styled from "styled-components";
const Btn = styled.button`
background-color: coral;
color: white;
padding: 10px 20px;
border: none;
border-radius: 8px;
cursor: pointer;
`;
function App() {
return <Btn>🎯 클릭하세요!</Btn>;
}
| 줄 | 설명 |
|---|---|
| 1 | import styled from "styled-components" — 라이브러리를 불러온다. |
| 3 | styled.button`...` — button 태그에 스타일을 입힌 새 컴포넌트를 만든다. |
| 4~9 | 백틱(backtick, 백틱) 안에 일반 CSS 문법 그대로 작성한다. |
| 13 | <Btn> — 만들어진 스타일 컴포넌트를 일반 컴포넌트처럼 사용한다. |
5. Tailwind CSS(테일윈드 씨에스에스) — 클래스 이름으로 스타일 조합하기
5.1 개념
미리 만들어진 수백 개의 클래스를 조합해서 스타일을 적용하는 방식이다. 별도의 CSS 파일을 작성하지 않아도 된다.
5.2 Vite(바이트) 프로젝트에 설치
npm install -D tailwindcss @tailwindcss/vite
5.3 vite.config.js 설정
import tailwindcss from "@tailwindcss/vite";
import { defineConfig } from "vite";
export default defineConfig({
plugins: [tailwindcss()],
});
5.4 index.css 에 추가
@import "tailwindcss";
5.5 기본 예제
function Card() {
return (
<div className="bg-yellow-100 p-6 rounded-xl shadow">
<h2 className="text-2xl font-bold text-gray-800">🌟 오늘의 퀘스트</h2>
<p className="text-gray-500 mt-2">몬스터 10마리 처치하기</p>
</div>
);
}
| 줄 | 설명 |
|---|---|
| 3 | bg-yellow-100 — 배경색, p-6 — 패딩(padding, 패딩), rounded-xl — 둥근 모서리, shadow — 그림자 |
| 4 | text-2xl — 글자 크기, font-bold — 굵게, text-gray-800 — 글자 색상 |
| 5 | mt-2 — 위쪽 여백(margin-top, 마진탑) |
테일윈드는 클래스 이름 자체가 스타일을 설명하기 때문에, CSS를 잘 모르는 입문자도 빠르게 결과를 볼 수 있다는 장점이 있다.
5가지 방법 비교표
| 방법 | 별도 파일 | CSS 문법 | 클래스 충돌 방지 | 추천 상황 |
|---|---|---|---|---|
| Inline Style(인라인 스타일) | ✗ | ✗ (객체) | ✓ | 동적 스타일, 빠른 테스트 |
| CSS File(씨에스에스 파일) | ✓ | ✓ | ✗ | 소규모 프로젝트, 입문 단계 |
| CSS Module(씨에스에스 모듈) | ✓ | ✓ | ✓ | 컴포넌트별 스타일 분리 |
| Styled-Components(스타일드 컴포넌트) | ✗ | ✓ | ✓ | 동적 스타일이 많은 프로젝트 |
| Tailwind CSS(테일윈드) | ✗ | ✗ (클래스) | ✓ | 빠른 개발, 디자인 시스템 |