[2026] Tailwind CSS 완벽 가이드 | Utility-First·반응형·다크모드·커스터마이징
이 글의 핵심
Tailwind CSS로 빠르게 UI를 구축하는 완벽 가이드입니다. 설치부터 Utility Classes, 반응형, 다크모드, 커스터마이징, 플러그인까지 실전 예제로 정리했습니다.
실무 경험 공유: 기존 CSS를 Tailwind로 마이그레이션하면서, 개발 속도를 2배 향상시키고 CSS 파일 크기를 70% 줄인 경험을 공유합니다.
들어가며: “CSS 작성이 느려요”
실무 문제 시나리오
시나리오 1: 클래스 이름 짓기가 어려워요
BEM, SMACSS 등 네이밍 규칙이 복잡합니다. Tailwind는 Utility Classes를 사용합니다.
시나리오 2: CSS 파일이 커져요
사용하지 않는 CSS가 많습니다. Tailwind는 사용한 것만 포함합니다.
시나리오 3: 반응형 구현이 번거로워요
미디어 쿼리를 매번 작성해야 합니다. Tailwind는 md:, lg: 접두사로 간단합니다.
1. Tailwind CSS란?
핵심 특징
Tailwind CSS는 Utility-First CSS 프레임워크입니다. 주요 장점:
- 빠른 개발: HTML에서 바로 스타일링
- 작은 번들: 사용한 클래스만 포함
- 일관성: 디자인 시스템 내장
- 반응형: 간단한 접두사
- 커스터마이징: 완벽한 제어
2. 설치
Vite + React
npm install -D tailwindcss postcss autoprefixer
npx tailwindcss init -p
아래 코드는 javascript를 사용한 구현 예제입니다. 각 부분의 역할을 이해하면서 코드를 살펴보시기 바랍니다.
// tailwind.config.js
export default {
content: [
"./index.html",
"./src/**/*.{js,ts,jsx,tsx}",
],
theme: {
extend: {},
},
plugins: [],
}
다음은 간단한 css 코드 예제입니다. 코드를 직접 실행해보면서 동작을 확인해보세요.
/* src/index.css */
@tailwind base;
@tailwind components;
@tailwind utilities;
3. Utility Classes
레이아웃
다음은 html를 활용한 상세한 구현 코드입니다. 각 부분의 역할을 이해하면서 코드를 살펴보시기 바랍니다.
<!-- Flexbox -->
<div class="flex items-center justify-between">
<div>Left</div>
<div>Right</div>
</div>
<!-- Grid -->
<div class="grid grid-cols-3 gap-4">
<div>1</div>
<div>2</div>
<div>3</div>
</div>
<!-- Spacing -->
<div class="p-4 m-2">
<div class="px-6 py-3">Content</div>
</div>
타이포그래피
아래 코드는 html를 사용한 구현 예제입니다. 각 부분의 역할을 이해하면서 코드를 살펴보시기 바랍니다.
<h1 class="text-4xl font-bold text-gray-900">
Heading
</h1>
<p class="text-base text-gray-600 leading-relaxed">
Paragraph text
</p>
<a class="text-blue-600 hover:text-blue-800 underline">
Link
</a>
색상
아래 코드는 html를 사용한 구현 예제입니다. 각 부분의 역할을 이해하면서 코드를 살펴보시기 바랍니다.
<!-- Background -->
<div class="bg-blue-500 hover:bg-blue-600">
Button
</div>
<!-- Text -->
<p class="text-red-500">Error message</p>
<!-- Border -->
<div class="border-2 border-gray-300">
Box
</div>
4. 반응형
Breakpoints
다음은 html를 활용한 상세한 구현 코드입니다. 각 부분의 역할을 이해하면서 코드를 살펴보시기 바랍니다.
<!-- 모바일: 세로, 데스크톱: 가로 -->
<div class="flex flex-col md:flex-row">
<div class="w-full md:w-1/2">Left</div>
<div class="w-full md:w-1/2">Right</div>
</div>
<!-- 반응형 텍스트 크기 -->
<h1 class="text-2xl md:text-4xl lg:text-6xl">
Responsive Heading
</h1>
<!-- 반응형 숨김 -->
<div class="hidden md:block">
Desktop only
</div>
Breakpoints:
sm: 640pxmd: 768pxlg: 1024pxxl: 1280px2xl: 1536px
5. 다크모드
설정
아래 코드는 javascript를 사용한 구현 예제입니다. 코드를 직접 실행해보면서 동작을 확인해보세요.
// tailwind.config.js
export default {
darkMode: 'class', // 또는 'media'
// ...
}
사용
아래 코드는 html를 사용한 구현 예제입니다. 코드를 직접 실행해보면서 동작을 확인해보세요.
<div class="bg-white dark:bg-gray-900">
<h1 class="text-gray-900 dark:text-white">
Title
</h1>
<p class="text-gray-600 dark:text-gray-300">
Content
</p>
</div>
토글 구현
다음은 typescript를 활용한 상세한 구현 코드입니다. 필요한 모듈을 import하고, 함수를 통해 로직을 구현합니다, 조건문으로 분기 처리를 수행합니다. 각 부분의 역할을 이해하면서 코드를 살펴보시기 바랍니다.
import { useEffect, useState } from 'react';
function ThemeToggle() {
const [darkMode, setDarkMode] = useState(false);
useEffect(() => {
if (darkMode) {
document.documentElement.classList.add('dark');
} else {
document.documentElement.classList.remove('dark');
}
}, [darkMode]);
return (
<button onClick={() => setDarkMode(!darkMode)}>
{darkMode ? '🌞' : '🌙'}
</button>
);
}
6. 커스터마이징
색상 추가
다음은 javascript를 활용한 상세한 구현 코드입니다. 각 부분의 역할을 이해하면서 코드를 살펴보시기 바랍니다.
// tailwind.config.js
export default {
theme: {
extend: {
colors: {
brand: {
50: '#f0f9ff',
100: '#e0f2fe',
500: '#0ea5e9',
900: '#0c4a6e',
},
},
},
},
}
<div class="bg-brand-500 text-white">
Brand Color
</div>
폰트 추가
아래 코드는 javascript를 사용한 구현 예제입니다. 각 부분의 역할을 이해하면서 코드를 살펴보시기 바랍니다.
// tailwind.config.js
export default {
theme: {
extend: {
fontFamily: {
sans: ['Pretendard', 'sans-serif'],
mono: ['Fira Code', 'monospace'],
},
},
},
}
7. 컴포넌트 추출
@apply
아래 코드는 css를 사용한 구현 예제입니다. 각 부분의 역할을 이해하면서 코드를 살펴보시기 바랍니다.
/* src/index.css */
@layer components {
.btn {
@apply px-4 py-2 rounded font-semibold transition;
}
.btn-primary {
@apply bg-blue-500 text-white hover:bg-blue-600;
}
.btn-secondary {
@apply bg-gray-200 text-gray-800 hover:bg-gray-300;
}
}
<button class="btn btn-primary">
Primary Button
</button>
8. 플러그인
공식 플러그인
npm install -D @tailwindcss/forms @tailwindcss/typography @tailwindcss/aspect-ratio
아래 코드는 javascript를 사용한 구현 예제입니다. 코드를 직접 실행해보면서 동작을 확인해보세요.
// tailwind.config.js
export default {
plugins: [
require('@tailwindcss/forms'),
require('@tailwindcss/typography'),
require('@tailwindcss/aspect-ratio'),
],
}
Typography 사용
다음은 간단한 html 코드 예제입니다. 코드를 직접 실행해보면서 동작을 확인해보세요.
<article class="prose lg:prose-xl dark:prose-invert">
<h1>Title</h1>
<p>This content will be beautifully styled automatically.</p>
</article>
9. 실전 예제: 카드 컴포넌트
다음은 typescript를 활용한 상세한 구현 코드입니다. 클래스를 정의하여 데이터와 기능을 캡슐화하며, 반복문으로 데이터를 처리합니다. 각 부분의 역할을 이해하면서 코드를 살펴보시기 바랍니다.
interface CardProps {
title: string;
description: string;
imageUrl: string;
tags: string[];
}
export function Card({ title, description, imageUrl, tags }: CardProps) {
return (
<div class="max-w-sm rounded-lg overflow-hidden shadow-lg hover:shadow-xl transition-shadow duration-300 bg-white dark:bg-gray-800">
<img
class="w-full h-48 object-cover"
src={imageUrl}
alt={title}
/>
<div class="p-6">
<h2 class="text-2xl font-bold mb-2 text-gray-900 dark:text-white">
{title}
</h2>
<p class="text-gray-600 dark:text-gray-300 mb-4">
{description}
</p>
<div class="flex flex-wrap gap-2">
{tags.map((tag) => (
<span class="px-3 py-1 text-sm bg-blue-100 dark:bg-blue-900 text-blue-800 dark:text-blue-200 rounded-full">
{tag}
</span>
))}
</div>
</div>
</div>
);
}
정리 및 체크리스트
핵심 요약
- Tailwind CSS: Utility-First CSS 프레임워크
- 빠른 개발: HTML에서 바로 스타일링
- 작은 번들: 사용한 클래스만 포함
- 반응형: 간단한 접두사
- 다크모드: 내장 지원
- 커스터마이징: 완벽한 제어
구현 체크리스트
- Tailwind CSS 설치
- 기본 Utility Classes 학습
- 반응형 구현
- 다크모드 구현
- 커스터마이징
- 플러그인 추가
같이 보면 좋은 글
- shadcn/ui 완벽 가이드
- React 18 심화 가이드
- Vite 5 완벽 가이드
이 글에서 다루는 키워드
Tailwind CSS, CSS, Utility-First, Responsive, Dark Mode, Frontend, Design
자주 묻는 질문 (FAQ)
Q. Tailwind vs Bootstrap, 어떤 게 나은가요?
A. Tailwind는 더 유연하고 커스터마이징이 쉽습니다. Bootstrap은 미리 만들어진 컴포넌트를 제공합니다. 커스텀 디자인은 Tailwind, 빠른 프로토타입은 Bootstrap을 권장합니다.
Q. HTML이 지저분해지지 않나요?
A. 처음엔 그럴 수 있지만, 익숙해지면 오히려 더 빠르고 명확합니다. 컴포넌트로 추출하면 깔끔해집니다.
Q. 성능은 어떤가요?
A. 매우 좋습니다. PurgeCSS로 사용하지 않는 클래스를 제거하여 프로덕션 번들이 10KB 미만입니다.
Q. 프로덕션에서 사용해도 되나요?
A. 네, GitHub, Netflix, NASA 등 많은 기업에서 사용합니다.