前端技术更新太快了,几乎每个月都有新玩意冒出来。CSS 工具库作为开发中不可或缺的一部分,这些年也在不断进化。从最早熟悉的 Bootstrap、Bulma,到后来风靡一时的 Tailwind CSS,再到最近几年热度很高的 UnoCSS,选择越来越多,但也让人有点纠结。
我自己是个比较注重效率和可维护性的开发者,也一直在尝试各种工具来提升开发体验。Tailwind CSS 我用了挺久的,UnoCSS 也深入试过一段时间。这篇文章我想结合自己的实际使用经验,聊聊为什么在体验过 UnoCSS 之后,我还是决定继续用 Tailwind CSS。
一、先认识一下这两位主角
1.1 Tailwind CSS 是啥?
Tailwind CSS 应该是目前最流行的原子化 CSS 框架之一。它的核心理念很简单:提供一堆小而精的类名,让你像搭积木一样拼出样式。
比如你想设置一个按钮:
<button class="bg-blue-500 hover:bg-blue-700 text-white font-bold py-2 px-4 rounded">
提交
</button>
它不像传统框架那样直接给你按钮、表单这些组件,而是给你很多基础功能类,比如 text-center
、flex
、p-4
这些。
它的优点:
- 写起来快,不用来回切换 HTML 和 CSS 文件。
- 高度定制,可以通过配置文件灵活调整颜色、间距、字体等。
- 生态强大,插件多、社区活跃。
- 文档好找,想找什么功能都很方便。
1.2 UnoCSS 又是什么?
UnoCSS 是个新兴的原子化 CSS 引擎,灵感来自 Tailwind,但思路更激进。它最大的特点就是——只生成你真正用到的类名,不预编译所有可能的组合。
比如你在代码里写了这个:
<div class="text-red-500 p-4 flex justify-center items-center"></div>
UnoCSS 就会动态生成对应的 CSS,而不是提前把所有类都编译进去。
它的优点:
- 构建速度快,项目再大也不怕卡顿。
- 非常灵活,支持自定义规则、变体。
- 配置简单,默认开箱即用。
- 兼容性好,支持 Vue、React、Svelte 等主流框架。
二、实战对比:到底谁更适合我?
接下来我会从几个关键维度来对比这两个工具,并配上代码示例。
2.1 上手难度 & 学习曲线
Tailwind CSS 示例:按钮 + 卡片布局
<!-- 按钮 -->
<button class="bg-blue-600 text-white px-4 py-2 rounded-md hover:bg-blue-800 transition">
点击我
</button>
<!-- 卡片 -->
<div class="max-w-sm rounded overflow-hidden shadow-lg m-4">
<img class="w-full" src="https://picsum.photos/200/300" alt="图片">
<div class="px-6 py-4">
<div class="font-bold text-xl mb-2">卡片标题</div>
<p class="text-gray-700 text-base">
这是一个简单的卡片内容区域。
</p>
</div>
</div>
Tailwind 的类名设计非常直观,基本遵循 CSS 属性的命名习惯,易于记忆和使用。
UnoCSS 示例:同样的效果,语法几乎一致
<!-- 按钮 -->
<button class="bg-blue-600 text-white px-4 py-2 rounded-md hover:bg-blue-800 transition">
点击我
</button>
<!-- 卡片 -->
<div class="max-w-sm rounded overflow-hidden shadow-lg m-4">
<img class="w-full" src="https://picsum.photos/200/300" alt="图片">
<div class="px-6 py-4">
<div class="font-bold text-xl mb-2">卡片标题</div>
<p class="text-gray-700 text-base">
这是一个简单的卡片内容区域。
</p>
</div>
</div>
你会发现,UnoCSS 的类名和 Tailwind 几乎一模一样,因为它是兼容 Tailwind 语法的。但不同之处在于 UnoCSS 不预先生成所有类,而是按需生成。
✅ 总结:两者语法相似,但 Tailwind 更适合团队协作,UnoCSS 更适合喜欢折腾的人。
2.2 自定义规则(UnoCSS 的强项)
UnoCSS 最大的优势之一就是高度可定制。你可以添加自定义规则,比如加一个 text-shadow
:
// uno.config.ts
export default defineConfig({
rules: [
[/^text-shadow-(.+)$/, ([, d]) => ({
textShadow: d.replace('~', ', ')
})]
]
})
然后你就可以这样用:
<h1 class="text-shadow-lg text-3xl">带阴影的文字</h1>
而在 Tailwind 中,如果你想实现类似功能,就得自己写额外的 CSS 或者安装插件。
2.3 构建性能对比(Vite + React)
UnoCSS 的构建速度确实更快
以 Vite + React 为例,创建一个项目后安装 UnoCSS:
npm install -D unocss @unocss/vite-preset-uno
然后在 vite.config.ts
中启用 UnoCSS 插件:
import { defineConfig } from 'vite'
import react from '@vitejs/plugin-react'
import Unocss from 'unocss/vite'
export default defineConfig({
plugins: [
react(),
Unocss()
]
})
运行项目后你会发现,热更新几乎是秒级完成,体验非常流畅。
Tailwind 的 JIT 模式已经足够优秀
虽然以前 Tailwind 的构建速度不如 UnoCSS,但自从引入了 JIT(Just-In-Time)模式后,性能已经大幅提升。
npm install -D tailwindcss postcss autoprefixer
npx tailwindcss init -p
然后在 tailwind.config.js
中启用 JIT:
module.exports = {
mode: 'jit',
content: ['./src/**/*.{js,jsx,ts,tsx}'],
theme: {
extend: {},
},
plugins: [],
}
配合 PostCSS 使用,在 postcss.config.js
中加入:
module.exports = {
plugins: {
tailwindcss: {},
autoprefixer: {},
}
}
最终你会发现,Tailwind 的构建速度已经非常接近 UnoCSS,除非你是做超大型项目,否则差别不大。
三、我的真实使用体验
3.1 初次尝试 UnoCSS:真香!
刚开始接触 UnoCSS 的时候,真的觉得它太酷了。特别是在 Vite 项目里,热更新几乎没有延迟,体验非常好。而且它的灵活性让我可以做一些 Tailwind 做不到的小技巧,比如自定义动画类名、快速适配设计稿等。
3.2 逐渐暴露的问题
但随着项目越来越复杂,一些问题也开始显现:
- 团队协作困难:不同人写的类名风格不一致,后期维护麻烦。
- 缺少现成资源:很多 UI 组件库和插件都不支持 UnoCSS,很多功能需要自己实现。
- 文档不够详细:遇到问题经常要靠社区讨论或源码分析,效率不高。
- 设计师难以参与:设计师通常熟悉 Tailwind 的类名,UnoCSS 的自定义规则让他们很难理解和配合。
3.3 回归 Tailwind:熟悉的味道又回来了
重新用回 Tailwind 后,我立刻感受到了那种“稳如老狗”的感觉:
- 类名统一,团队沟通顺畅;
- 插件丰富,开发效率高;
- 文档全面,解决问题快;
- 和设计师配合也没障碍;
- 并且 Tailwind 的 JIT 模式也让构建速度完全跟上了节奏。
四、为什么最终选择 Tailwind CSS?
综合来看,我之所以回归 Tailwind,主要是因为以下几个原因:
4.1 稳定性和可靠性更重要
对于企业级项目来说,稳定性永远是第一位的。Tailwind 已经被无数项目验证过,遇到问题也有成熟的解决方案。而 UnoCSS 虽然创新性强,但在稳定性和成熟度上还有待观察。
4.2 生态和社区才是王道
Tailwind 的生态圈太强大了。从 UI 组件库到插件、模板、主题,应有尽有。相比之下,UnoCSS 的生态还在起步阶段,很多功能都需要自己造轮子。
4.3 团队协作需要统一规范
Tailwind 的类名体系已经成为事实标准,团队成员之间沟通无障碍。而 UnoCSS 的灵活性反而容易造成风格混乱,影响协作效率。
4.4 文档和学习资源丰富
Tailwind 的文档和教程多到爆炸,不管是自学还是培训新人,都非常方便。而 UnoCSS 的学习曲线相对陡峭,不利于快速上手。
4.5 性能其实已经够用
虽然 UnoCSS 构建更快,但 Tailwind 的 JIT 模式已经足够应对绝大多数项目的需求。除非你是做超大规模应用,否则两者差距不大。
五、未来展望:UnoCSS 仍有潜力
UnoCSS 确实带来了不少新的思路,尤其是在灵活性和构建性能方面,给整个 CSS 工具生态注入了活力。我相信随着时间推移,它的生态会不断完善,社区也会越来越壮大。也许在未来,它会成为更多开发者的首选。
但就目前而言,Tailwind CSS 依然是最适合团队协作、企业项目、以及追求高效开发的选择。