# 설치
npm install tailwindcss
npx tailwindcss init
Tailwind CSS는 유틸리티 클래스를 기반으로 한 혁신적인 CSS 프레임워크입니다. 미리 정의된 클래스를 조합하여 HTML 내에서 직접 스타일을 구성할 수 있어 생산성을 크게 높일 수 있습니다. 2017년에 Adam Wathan에 의해 만들어진 이 프레임워크는 CSS 작성 방식에 혁명을 가져왔으며, 현재 많은 기업과 개발자들이 채택하고 있습니다.
기본 설정
// tailwind.config.js
module.exports = {
content: ["./src/**/*.{html,js}"],
theme: {
extend: {},
},
plugins: [],
}
/* main.css */
@tailwind base;
@tailwind components;
@tailwind utilities;
유틸리티 클래스 비교
기능 | Tailwind 클래스 | 일반 CSS |
---|---|---|
너비 | w-full , w-1/2 , w-64 |
width: 100% , width: 50% , width: 16rem |
여백 | m-4 , mx-2 , mt-10 |
margin: 1rem , margin: 0 0.5rem , margin-top: 2.5rem |
색상 | text-blue-500 , bg-red-200 |
color: #3b82f6 , background-color: #fecaca |
레이아웃 | flex , grid , items-center |
display: flex , display: grid , align-items: center |
Tailwind CSS의 핵심 개념
1. 유틸리티 우선 접근법
Tailwind의 핵심 철학은 "유틸리티 우선(utility-first)" 접근법입니다. 이는 미리 정의된 유틸리티 클래스를 조합하여 디자인을 구축하는 방식입니다.
<!-- 전통적인 CSS 방식 -->
<div class="chat-notification">
<div class="chat-notification-logo"></div>
<div class="chat-notification-content">
<h4>새 메시지</h4>
<p>새로운 메시지가 도착했습니다.</p>
</div>
</div>
<!-- Tailwind CSS 방식 -->
<div class="p-6 max-w-sm mx-auto bg-white rounded-xl shadow-lg flex items-center space-x-4">
<div class="shrink-0">
<img class="h-12 w-12" src="/img/logo.svg" alt="Logo">
</div>
<div>
<div class="text-xl font-medium text-black">새 메시지</div>
<p class="text-gray-500">새로운 메시지가 도착했습니다.</p>
</div>
</div>
2. 반응형 디자인
Tailwind는 모바일 우선 접근 방식을 채택하고 있으며, 간단한 접두사 시스템을 사용하여 반응형 디자인을 쉽게 구현할 수 있습니다.
<div class="w-full md:w-1/2 lg:w-1/3 p-4">
<!-- 모바일: 전체 너비, 태블릿: 50%, 데스크톱: 33.3% -->
<div class="text-sm md:text-base lg:text-lg">
반응형 텍스트 크기
</div>
</div>
기본 브레이크포인트:
sm
: 640px 이상md
: 768px 이상lg
: 1024px 이상xl
: 1280px 이상2xl
: 1536px 이상
3. 상태 변형(State Variants)
Tailwind는 호버, 포커스, 활성 상태 등 다양한 상태에 대한 스타일링을 지원합니다.
<button class="bg-blue-500 hover:bg-blue-700 text-white font-bold py-2 px-4 rounded focus:outline-none focus:ring-2 focus:ring-blue-400">
저장하기
</button>
4. 다크 모드
Tailwind 2.0부터는 다크 모드를 위한 내장 지원이 추가되었습니다.
<div class="bg-white dark:bg-gray-800 text-gray-900 dark:text-white">
라이트 모드와 다크 모드에서 다르게 보입니다.
</div>
실전 예제: 카드 컴포넌트 만들기
<div class="max-w-md mx-auto bg-white rounded-xl shadow-md overflow-hidden md:max-w-2xl m-4">
<div class="md:flex">
<div class="md:shrink-0">
<img class="h-48 w-full object-cover md:h-full md:w-48" src="https://picsum.photos/200" alt="상품 이미지">
</div>
<div class="p-8">
<div class="uppercase tracking-wide text-sm text-indigo-500 font-semibold">케이스 스터디</div>
<a href="#" class="block mt-1 text-lg leading-tight font-medium text-black hover:underline">Tailwind CSS로 멋진 인터페이스 만들기</a>
<p class="mt-2 text-gray-500">유틸리티 클래스를 활용하여 빠르게 디자인을 구현하는 방법을 알아봅니다.</p>
<div class="mt-4">
<button class="px-4 py-2 bg-indigo-500 text-white rounded hover:bg-indigo-600 focus:outline-none focus:ring-2 focus:ring-indigo-400">
더 알아보기
</button>
</div>
</div>
</div>
</div>
커스터마이징
Tailwind의 큰 장점 중 하나는 높은 커스터마이징 가능성입니다. tailwind.config.js
파일을 통해 색상, 간격, 브레이크포인트 등을 손쉽게 조정할 수 있습니다.
// tailwind.config.js
module.exports = {
theme: {
colors: {
primary: '#FF6B6B',
secondary: '#4ECDC4',
// 기본 색상을 커스텀 색상으로 재정의
},
extend: {
spacing: {
'72': '18rem',
'84': '21rem',
'96': '24rem',
},
borderRadius: {
'4xl': '2rem',
}
}
},
variants: {
extend: {
backgroundColor: ['active'],
textColor: ['visited'],
}
}
}
JIT(Just-In-Time) 모드
Tailwind 3.0부터는 JIT 모드가 기본적으로 활성화되어 있습니다. 이 모드는 빌드 시간을 크게 단축시키고, 임의의 값을 사용할 수 있게 해줍니다.
<!-- 임의의 값 사용 예시 -->
<div class="top-[117px] h-[calc(100vh-117px)] bg-[#bada55]">
커스텀 위치, 높이, 배경색
</div>
성능 최적화
프로덕션 환경에서는 PurgeCSS가 통합되어 있어, 사용하지 않는 클래스를 자동으로 제거하고 최종 CSS 파일 크기를 최소화합니다.
// tailwind.config.js
module.exports = {
// content 속성으로 사용되는 파일을 지정
content: [
'./src/**/*.{js,jsx,ts,tsx}',
'./public/index.html',
],
// ...기타 설정
}
Tailwind CSS와 컴포넌트 추상화
반복되는 디자인 패턴은 @apply
지시어를 사용하여 추상화할 수 있습니다.
/* styles.css */
@tailwind base;
@tailwind components;
.btn {
@apply px-4 py-2 rounded font-semibold;
}
.btn-blue {
@apply bg-blue-500 text-white hover:bg-blue-700;
}
@tailwind utilities;
<button class="btn btn-blue">
버튼
</button>
Tailwind CSS와 프레임워크 통합
React와 통합
function Button({ children }) {
return (
<button className="bg-blue-500 hover:bg-blue-700 text-white font-bold py-2 px-4 rounded">
{children}
</button>
);
}
Vue와 통합
<template>
<button class="bg-green-500 hover:bg-green-700 text-white font-bold py-2 px-4 rounded">
<slot></slot>
</button>
</template>
Tailwind CSS의 장단점
장점 | 단점 |
---|---|
빠른 개발 속도 | 처음에는 클래스명 외우기 어려움 |
일관된 디자인 | HTML이 길어질 수 있음 |
반응형 디자인 용이 | 디자인 시스템 없이는 일관성 유지 어려움 |
커스터마이징 용이 | 기존 프로젝트 마이그레이션 어려움 |
작은 번들 크기 |
Tailwind CSS는 "유틸리티 우선"이라는 혁신적인 접근 방식을 통해 웹 개발 방식을 변화시켰습니다. 클래스를 직접 HTML에 적용함으로써 CSS 파일을 오가는 시간을 줄이고, 반복적인 스타일 작성을 최소화할 수 있습니다. 특히 디자인 시스템과 결합할 때 그 효율성이 더욱 빛을 발합니다.
빠른 프로토타이핑부터 대규모 프로덕션 웹사이트까지 다양한 프로젝트에 활용할 수 있는 유연성을 갖추고 있어, 현대 웹 개발의 필수 도구로 자리잡고 있습니다.
'TypeScript' 카테고리의 다른 글
React에서 브라우저 창 제어하기: 새 창 열기부터 URL 추적까지 (1) | 2025.03.28 |
---|---|
Next.js에서 cookies-next로 쿠키 관리하기 (2) | 2025.03.22 |
Zod: TypeScript 스키마 검증 (0) | 2025.02.20 |
React Hook Form: 폼 상태 관리 (0) | 2025.02.19 |
Node-Cache : 서버 성능 최적화 (0) | 2025.02.17 |