Tailwind 不是传统意义上的「CSS 框架」(像 Bootstrap 那种), 它的核心理念是:
Utility-First CSS(原子化 CSS) ——用一堆“功能类名”来直接在 HTML 里组合样式,而不是写 CSS 文件。
举个例子 👇 传统 CSS 写法:
xxxxxxxxxx61.card {2 background-color: white;3 border-radius: 0.5rem;4 box-shadow: 0 1px 2px rgba(0,0,0,0.1);5 padding: 1rem;6}HTML:
xxxxxxxxxx11<div class="card">...</div>而 Tailwind 是这样:
xxxxxxxxxx11<div class="bg-white rounded-lg shadow p-4">...</div>特点:
tailwind.config.js 可集中管理设计系统(颜色、字体、间距等)。我建议把学习拆成 5 个阶段:
目标是看懂 Tailwind 类名在做什么。 重点:
了解命名规律:
例如 text-xl、bg-blue-500、p-4、flex、justify-between。
学习 Tailwind 如何表达:
bg-、text-)p-、m-)flex、grid)font-bold、text-sm)学习组合用法:通过多个 class 实现组件样式。
👉 推荐资源:
目标是掌握如何组合 class 构建 UI。
练习题建议:
在这个阶段,你会体会到:
Tailwind 的强大之处在于 响应式前缀 与 状态前缀:
响应式:sm:、md:、lg:、xl:
xxxxxxxxxx11<div class="text-base md:text-lg lg:text-xl">...</div>状态类:hover:、focus:、disabled:、dark:
xxxxxxxxxx11<button class="bg-blue-500 hover:bg-blue-600 focus:ring">Click</button>组合写法:
xxxxxxxxxx11<div class="dark:bg-gray-900 sm:flex md:grid hover:scale-105">...</div>当你用 Tailwind 做真实项目时,一定要学会配置:
修改 tailwind.config.js
自定义颜色 / 字体 / 间距:
xxxxxxxxxx101theme: {2 extend: {3 colors: {4 brand: '#0EA5E9',5 },6 fontFamily: {7 sans: ['Inter', 'sans-serif'],8 },9 }10}使用 @apply 合并常用样式:
xxxxxxxxxx31.btn-primary {2 @apply bg-blue-500 text-white px-4 py-2 rounded;3}👉 这一阶段能让你真正“定制化” Tailwind。
做一个完整页面或组件库。 例如:
你会学习到:
@tailwindcss/forms, typography)边学边查文档 Tailwind 文档非常好用,几乎是“即搜即用”型。 👉 https://tailwindcss.com/docs
跟着官方示例做小项目 例如:Tailwind UI 示例,这个地方可以看到免费的组件编写范例。 即便是免费组件,也能学到布局技巧。
配合 VSCode 插件使用
安装 Tailwind CSS IntelliSense,可以获得实时 class 提示和颜色预览。
模仿别人的写法 在 GitHub 搜索 “tailwind landing page”,看看别人项目里怎么堆类、组织结构。
多实践,小总结
| 阶段 | 学习内容 | 建议时间 |
|---|---|---|
| 1 | 理解 Utility-first 概念、常见类名 | 1 天 |
| 2 | 练习基本组件(按钮、卡片、导航栏) | 2–3 天 |
| 3 | 响应式与状态前缀 | 1–2 天 |
| 4 | 主题配置与插件 | 2 天 |
| 5 | 小项目实战 | 3–5 天 |
Tailwind 的类名基本可以看成:
[variant:][responsive:]<utility>-<modifier>
举例:md:hover:bg-blue-500
md: 是响应式前缀(只在中等屏及以上生效)hover: 是状态变体(鼠标悬停时)bg-blue-500 是具体 utility(背景色为 blue-500)替换成 CSS 意味:
@media (min-width: md) { .md\:hover\:bg-blue-500:hover { background-color: #...; } }
常见前缀(默认断点,项目可配置):
sm:、md:、lg:、xl:、2xl:
用法:sm:text-sm md:text-base lg:text-lg(小屏 text-sm,中屏 text-base,大屏 text-lg)你可以把多个前缀链在一起:sm:md:class(不过通常只用一个),也可以和状态组合:lg:focus:text-red-500。
常见:
hover:、focus:、active:、visited:、disabled:、checked:、group-hover:、peer-checked:、dark:(暗色模式)等。
示例:hover:scale-105 → :hover { transform: scale(1.05); }注意 group-* 和 peer-* 是用来在父/同级元素的状态改变时联动改变子元素。
-,例如 -mt-4 表示 margin-top: -1rem。!(例如 !text-red-500)会把生成的 CSS 带上 !important,用于覆盖冲突。JIT 模式支持任意值(方括号):
w-[37px] → width: 37px;bg-[#1c1c1c] → 指定任意十六进制颜色top-[10%]、grid-cols-[200px_minmax(0,1fr)] 等任意变体(更高级):
before:content-['•'](JIT 支持某些伪元素/伪类的任意用法)md:[&>a]:text-red-500(工具化的复杂选择器支持)bg-blue-500/50 表示 blue-500 的 50% 不透明度(兼容 Tailwind 的颜色系统)text-black/70 等间距(spacing):
p-4(padding: 1rem)、px-4(左右 padding)、py-2(上下)m-2, mt-4, mb-1(margin)-ml-2尺寸:
w-1/2、w-1/3、w-full、w-screen、w-auto、w-[300px]h-8、h-screen、h-auto文字与字体:
text-sm、text-lg、font-bold、italic、uppercaseleading-7、字距 tracking-wide颜色与边框:
bg-red-500、text-gray-700、border、border-2、border-red-300border-t、border-b-4、border-l圆角/阴影:
rounded、rounded-md、rounded-full、shadow、shadow-lg布局:
flex、inline-flex、grid、grid-cols-3、gap-4justify-between、items-center、place-content-center变换/过渡:
transform、translate-x-2、scale-95、rotate-3transition、duration-200、ease-in-out可见性/层级:
hidden、block、inline-block、z-10其他:
opacity-50、pointer-events-none、cursor-pointer、select-nonetext-sm text-lg),最终生效的是在生成的 CSS 中后出现的规则(通常是后写的类覆盖前写的类)。! 强制)。! 来明确。@apply 和自定义类当 class 变多时,可以把常用组合抽成 CSS 类:
xxxxxxxxxx41/* styles.css */2.btn {3@apply px-4 py-2 rounded-md bg-blue-500 text-white hover:bg-blue-600;4}
优点:组件化、可读性好;缺点:某些动态/任意值不能直接 @apply(受限制)。
@tailwindcss/forms、typography(prose)、aspect-ratio 等tailwind.config.js 里 theme.extend 自定义颜色、spacing、fonts 等dark:bg-gray-900(根据 media 或 class 配置)peer-checked:...、group-hover:...)class="p-4 bg-white rounded-lg shadow hover:shadow-lg transition"xxxxxxxxxx61padding: 1rem;2background-color: #fff;3border-radius: 0.5rem;4box-shadow: ...;5transition: box-shadow 150ms;6&:hover { box-shadow: larger...; }
class="md:grid md:grid-cols-3 gap-6"xxxxxxxxxx51@media(min-width: md) {2display: grid;3grid-template-columns: repeat(3, minmax(0,1fr));4}5gap: 1.5rem;
class="text-sm md:text-base lg:text-lg font-medium text-gray-700/90"xxxxxxxxxx41font-size: 0.875rem; /* small */2@media(min-width: md) { font-size: 1rem; }3@media(min-width: lg) { font-size: 1.125rem; }4color: rgba(..., 0.9); /* gray-700 with 90% opacity */
md: / hover: / dark:),弄清楚“何时生效”。bg-、text-、p-、m-、grid-、flex → 立即能猜到是背景、文字、padding、margin、网格、弹性布局。-4、-500、-1/2、-[37px] → 对应 spacing、颜色 shade、分数、任意值。