Tailwind CSS — CodeRoadMapTailwind CSS
原子化 CSS 框架,快速构建界面。
Tailwind CSS
这一课你将能做到
- 用 Tailwind 工具类快速开发 UI
- 配置自定义主题(颜色、字体、间距)
- 提取组件类避免重复
为什么要学
传统 CSS 开发:写 HTML → 想类名 → 写 CSS → 调样式,来回切换文件,效率低。Tailwind 把样式变成工具类,直接在 HTML 里写 class="flex items-center justify-between p-4",不用想类名,不用切文件。
人话:Tailwind 是「乐高积木」,每个类是一块积木,拼起来就是完整 UI。
先建立图像
<!-- 传统 CSS -->
<div class="card">
<h2 class="card-title">标题</h2>
<p class="card-desc">描述</p>
</div>
<style>
.card {
background: white;
border-radius: 8px;
padding: 16px;
box-shadow: 0 1px 3px rgba(0,0,0,0.1);
}
.card-title {
font-size: 18px;
font-weight: 600;
margin-bottom: 8px;
}
.card-desc {
color: #666;
font-size: 14px;
}
</style>
<!-- Tailwind -->
<div class="bg-white rounded-lg p-4 shadow">
<h2 class="text-lg font-semibold mb-2">标题</h2>
<p class="text-gray-600 text-sm">描述</p>
</div>
跟着做
步骤 1:安装与配置
# 创建项目
npm create vite@latest myapp -- --template react
cd myapp
# 安装 Tailwind
npm install -D tailwindcss postcss autoprefixer
npx tailwindcss init -p
生成 tailwind.config.js:
/** @type {import('tailwindcss').Config} */
export default {
content: [
"./index.html",
"./src/**/*.{js,ts,jsx,tsx}",
],
theme: {
extend: {},
},
plugins: [],
}
在 src/index.css 引入:
@tailwind base;
@tailwind components;
@tailwind utilities;
步骤 2:基础工具类
<!-- 布局 -->
<div class="flex items-center justify-between">
<div class="grid grid-cols-3 gap-4">
<div class="block">块级元素</div>
<div class="inline-block">行内块</div>
<div class="hidden md:block">移动端隐藏,桌面端显示</div>
<!-- 间距 -->
<div class="p-4">内边距 1rem</div>
<div class="px-4 py-2">水平 1rem,垂直 0.5rem</div>
<div class="m-4">外边距 1rem</div>
<div class="mt-8">上外边距 2rem</div>
<!-- 尺寸 -->
<div class="w-full">宽度 100%</div>
<div class="w-1/2">宽度 50%</div>
<div class="h-64">高度 16rem</div>
<div class="max-w-7xl mx-auto">最大宽度 + 水平居中</div>
<!-- 文字 -->
<p class="text-sm">小号字</p>
<p class="text-lg">大号字</p>
<p class="font-bold">加粗</p>
<p class="text-center">居中</p>
<p class="text-gray-600">灰色文字</p>
<!-- 颜色 -->
<div class="bg-blue-500">蓝色背景</div>
<div class="bg-blue-500/50">50% 透明度</div>
<p class="text-white">白色文字</p>
<div class="border border-gray-300">灰色边框</div>
<!-- 圆角 -->
<div class="rounded">小圆角</div>
<div class="rounded-lg">大圆角</div>
<div class="rounded-full">全圆角</div>
<!-- 阴影 -->
<div class="shadow">默认阴影</div>
<div class="shadow-lg">大阴影</div>
<div class="shadow-none">无阴影</div>
步骤 3:响应式设计
<!-- 移动优先:默认样式是移动端,md: 以上是桌面端 -->
<div class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-4">
<div>卡片 1</div>
<div>卡片 2</div>
<div>卡片 3</div>
</div>
<!-- 断点:
sm: 640px
md: 768px
lg: 1024px
xl: 1280px
2xl: 1536px
-->
步骤 4:悬停、焦点等状态
<button class="bg-blue-500 hover:bg-blue-600 active:bg-blue-700 text-white px-4 py-2 rounded transition">
按钮
</button>
<input class="border border-gray-300 focus:border-blue-500 focus:ring-2 focus:ring-blue-200 rounded px-3 py-2 outline-none">
<div class="group hover:bg-gray-50 p-4">
<p class="group-hover:text-blue-500">悬停父元素时变色</p>
</div>
步骤 5:实战——课程卡片
<div class="max-w-sm rounded-lg overflow-hidden shadow-lg hover:shadow-xl transition-shadow bg-white">
<img class="w-full h-48 object-cover" src="course.jpg" alt="课程封面">
<div class="p-6">
<div class="flex items-center justify-between mb-2">
<span class="text-xs font-semibold text-blue-600 bg-blue-50 px-2 py-1 rounded">前端</span>
<span class="text-sm text-gray-500">3.5 小时</span>
</div>
<h3 class="text-xl font-bold mb-2 text-gray-900">React 入门到精通</h3>
<p class="text-gray-600 text-sm mb-4 line-clamp-2">
从零开始学习 React,掌握组件、Hooks、状态管理等核心概念。
</p>
<div class="flex items-center justify-between">
<div class="flex items-center">
<img class="w-8 h-8 rounded-full mr-2" src="avatar.jpg" alt="讲师">
<span class="text-sm text-gray-700">张老师</span>
</div>
<span class="text-lg font-bold text-blue-600">¥99</span>
</div>
</div>
</div>
步骤 6:自定义主题
// tailwind.config.js
export default {
content: ["./src/**/*.{js,jsx}"],
theme: {
extend: {
colors: {
primary: {
50: '#eff6ff',
500: '#3b82f6',
600: '#2563eb',
700: '#1d4ed8',
},
},
fontFamily: {
sans: ['Inter', 'system-ui', 'sans-serif'],
},
spacing: {
'128': '32rem',
},
},
},
plugins: [],
}
<button class="bg-primary-500 hover:bg-primary-600 text-white">
自定义颜色
</button>
步骤 7:提取组件类
/* src/index.css */
@tailwind base;
@tailwind components;
@tailwind utilities;
@layer components {
.btn-primary {
@apply bg-blue-500 hover:bg-blue-600 text-white font-semibold py-2 px-4 rounded transition;
}
.card {
@apply bg-white rounded-lg shadow p-6;
}
.input {
@apply border border-gray-300 rounded px-3 py-2 focus:border-blue-500 focus:ring-2 focus:ring-blue-200 outline-none;
}
}
<button class="btn-primary">按钮</button>
<div class="card">卡片内容</div>
<input class="input" placeholder="输入...">
步骤 8:Dark Mode
// tailwind.config.js
export default {
darkMode: 'class', // 或 'media'
// ...
}
<!-- 手动切换 -->
<html class="dark">
<body class="bg-white dark:bg-gray-900 text-gray-900 dark:text-white">
<button onclick="document.documentElement.classList.toggle('dark')">
切换主题
</button>
</body>
</html>
常用工具类速查
| 类别 | 类名 | 说明 |
|---|
| 布局 | flex grid block inline-block | 显示方式 |
| 对齐 | items-center justify-between | 对齐方式 |
| 间距 | p-4 m-4 px-4 py-2 | 内/外边距 |
| 尺寸 | w-full h-64 max-w-7xl | 宽高 |
| 文字 | text-sm font-bold text-center | 字体 |
| 颜色 | bg-blue-500 text-gray-600 | 背景/文字色 |
| 边框 | border rounded-lg | 边框/圆角 |
| 阴影 | shadow shadow-lg | 阴影 |
| 状态 | hover:bg-blue-600 focus:ring-2 | 悬停/焦点 |
| 响应式 | md:grid-cols-2 lg:flex | 断点前缀 |
讲清楚要点
- 工具类优先:直接用
flex、p-4,不用想类名。
- 移动优先:默认样式是移动端,
md: 以上是桌面端。
- 状态前缀:
hover:、focus:、active: 实现交互效果。
- @apply 提取组件:重复的工具类组合提取成组件类。
- 配置文件扩展:
tailwind.config.js 自定义颜色、字体、间距。
你可能会懵的地方
-
Tailwind 和 Bootstrap 选哪个?
Bootstrap 组件现成但样式固定;Tailwind 灵活但要用工具类拼。定制需求高用 Tailwind,快速出原型用 Bootstrap。
-
HTML 里类名太长怎么办?
用 @apply 提取组件类,或用 React/Vue 组件封装。
-
Tailwind 会不会让 HTML 很乱?
会,但换来的是不用切文件、不用想类名。适应后效率提升明显。
-
如何调试 Tailwind?
浏览器 DevTools 查看 class 对应的样式,或安装 Tailwind CSS IntelliSense VSCode 插件。
错法对照
| 错法 | 问题 | 正解 |
|---|
| 内联样式和 Tailwind 混用 | 优先级混乱 | 统一用 Tailwind |
忘记配置 content | 样式不生效 | tailwind.config.js 配置 content: ["./src/**/*.{js,jsx}"] |
| 重复的工具类组合 | 代码冗余 | 用 @apply 提取组件类 |
移动端用 md:hidden | 逻辑反了 | 移动优先,默认显示,md:block 桌面端显示 |
| 所有颜色都写死 | 主题不统一 | 配置文件自定义颜色 |
卡点急救
- 样式不生效:检查
content 配置是否包含文件路径,重启开发服务器。
- 自定义颜色不生效:确认在
tailwind.config.js 的 theme.extend.colors 里配置。
- 响应式不生效:检查断点前缀拼写,确认是移动优先(默认样式是移动端)。
面试常问
-
Tailwind 的优缺点?
优点:开发快、样式一致、不用想类名;缺点:HTML 类名长、学习曲线。
-
如何优化 Tailwind 生产环境体积?
PurgeCSS 移除未使用的样式(Tailwind 内置),或手动配置 purge 选项。
-
Tailwind 和 CSS-in-JS 选哪个?
Tailwind 用工具类,CSS-in-JS 用 JS 写样式。看团队习惯和项目需求。
自测三问
- Tailwind 的断点有哪些?
- 如何实现 Dark Mode?
@apply 的作用?
小结一句话
Tailwind 用工具类快速开发 UI,移动优先 + 状态前缀 + 响应式断点,配置自定义主题。
延伸