“我实在想不出任何话能说服你,在HTML中散布几十个表现性类名实际上是个好主意。”
这是Adam Wathan——Tailwind CSS的创始人——在Rails World 2023上的直白话语。他是对的——当你第一次看到Tailwind代码时,它看起来绝对糟糕。但这里有个转折:一旦开发者真正尝试了它,他们会有完全不同的反应。
令人震惊的第一印象
让我们对新手诚实一下Tailwind看起来是什么样子:
传统CSS方法:
<div class="testimonial-card">
<img class="avatar" src="profile.jpg" alt="Profile">
<h3 class="name">Eric Lane</h3>
<p class="title">Project Manager</p>
</div>
Tailwind方法:
<div class="bg-white rounded-2xl shadow-lg overflow-hidden p-1 pb-0">
<img class="w-20 h-20 rounded-full outline-2 outline-white -mt-10"
src="profile.jpg" alt="Profile">
<h3 class="font-semibold">Eric Lane</h3>
<p class="text-sm text-gray-600">Project Manager</p>
</div>
你的第一反应?“这太疯狂了!” 而Wathan完全同意。但这里是他在六年构建Tailwind后发现的:“大多数人真正尝试后,很快就开始感觉’我怎么会认为写[传统CSS]是更好的主意?‘"
"顿悟”时刻:现场编码揭示魔法
Wathan没有试图争论为什么Tailwind是好的,而是做了一些聪明的事情——他从头开始现场编码整个组件。观看他实时构建一个复杂的个人资料卡揭示了一些非凡的东西:
会震惊你的速度
- 无需在HTML和CSS文件之间切换上下文
- 输入类名时即时视觉反馈
- 无命名疲劳——告别”这个类该叫什么?”
- 一切都在一个地方——样式就在你需要的地方
超越传统框架的灵活性
与Bootstrap或Foundation将你锁定在他们的设计系统中不同,Tailwind给你构建任何东西的基础块:
<!-- 零自定义CSS的复杂悬停效果 -->
<div class="group hover:scale-110 transition duration-200">
<img class="group-hover:scale-110 transition duration-200">
</div>
响应式布局革命
Wathan展示了一些让传统CSS开发者喜极而泣的东西——真正有意义的响应式设计:

<!-- 移动优先的响应式网格 -->
<div class="grid gap-4 md:grid-cols-2 lg:grid-cols-3">
<div class="md:col-span-2 aspect-video md:aspect-auto">主图</div>
<div class="aspect-square">方形项目</div>
<div class="md:col-start-1 md:row-start-3">定位项目</div>
<div class="md:col-span-1 md:row-span-2">高项目</div>
</div>
结果? 一个Pinterest风格的瀑布布局,用传统CSS需要几十行自定义CSS,完全用实用类构建。没有媒体查询,没有复杂的CSS——只有可读、可维护的HTML。
深色模式魔法(无需JavaScript)
当其他框架在深色模式实现上挣扎时,Tailwind让它变得微不足道:
<div class="bg-white dark:bg-gray-900 text-gray-900 dark:text-white">
<h1 class="text-indigo-600 dark:bg-gradient-to-r dark:from-indigo-400 dark:to-sky-400
dark:bg-clip-text dark:text-transparent dark:text-3xl">
深色模式下的渐变文字!
</h1>
</div>

想深入了解深色模式的可能性?查看全面的深色模式文档了解高级技术和自定义选项。
秘密武器:数据属性和状态管理
这里是Tailwind变得真正聪明的地方。想要一个显示加载图标的加载按钮?大多数框架需要JavaScript来切换类。Tailwind让你声明式地做到:
<button class="group" data-loading>
<span class="group-data-[loading]:text-transparent">
立即支付
</span>
<span class="hidden group-data-[loading]:flex absolute inset-0 items-center justify-center">
<svg class="animate-spin"><!-- 加载图标 --></svg>
</span>
</button>
一个数据属性更改控制整个按钮状态。不需要JavaScript类操作!
重复神话,彻底粉碎
批评者说: “但是所有那些重复的HTML怎么办?”
Wathan的回应: “管理重复的HTML字面上就是模板语言被设计来解决的整个问题域!”
<!-- Rails partial - 写一次,到处使用 -->
<% users.each do |user| %>
<%= render 'user_card', user: user %>
<% end %>

对于像样式链接这样的简单元素,Tailwind提供@apply来将实用类提取到自定义类中:
.link-primary {
@apply text-indigo-500 hover:text-indigo-900 focus:underline font-medium;
}
但Wathan警告:只对简单的、单元素组件使用这个。 复杂的多元素组件最好用partials处理。
动态主题:终极灵活性
这里有一些会让你惊掉下巴的东西。想让用户自定义你应用的主题颜色?传统CSS需要生成几十个样式表。Tailwind用CSS变量处理它:
<!-- 通过CSS变量设置动态颜色 -->
<div style="--btn-bg: orange; --btn-hover: #ff8800; --btn-text: white;">
<button class="bg-[var(--btn-bg)] hover:bg-[var(--btn-hover)] text-[var(--btn-text)]">
动态主题按钮
</button>
</div>

强大之处? 你的用户可以通过管理界面自定义颜色,这些更改立即应用于复杂的悬停状态、焦点环和任何其他交互元素——不需要CSS编译。
维护现实检验
Wathan抛出这个真相炸弹:“维护CSS很难。这就是为什么有课程、书籍和带有时髦名字的不同CSS方法论架构。从来没有人争论过如何写可维护的HTML。”
数字支持这一点:
- 当一切都是实用类时零CSS优先级战争
- 更改一个组件没有神秘的副作用
- 几个月后回来时立即理解
- 自信删除——删除HTML,样式自动删除
为什么传统CSS开发者正在转变
从已经做出转变的开发者那里的证词是非凡的:
“我怀疑了好几个月。类看起来丑陋和错误。但在用Tailwind构建了一个项目后,我无法回去了。开发速度和可维护性简直无可比拟。” - 资深前端开发者
“切换到Tailwind后,我们的CSS包大小减少了60%,开发时间减少了40%。学习曲线是值得的。” - 技术负责人

值得付出的学习曲线
是的,Tailwind有学习曲线。你需要记住实用类并理解间距比例。但这里是区别:你学一次,它到处适用。
传统CSS要求你:
- 为每个项目学习新的类名
- 理解复杂的继承链
- 调试优先级问题
- 维护不断增长的样式表
Tailwind要求你:
- 学习实用类(一次)
- 一致地应用它们(到处)
- 就这样。
真实世界的性能优势
除了开发者体验,Tailwind提供可衡量的性能提升:
- 通过未使用样式清除更小的CSS包
- 由于实用样式很少改变,更好的缓存
- 通过优化的CSS交付更快的加载时间
- 通过更简单的样式表减少运行时成本
结论:它比看起来有效得多
Adam Wathan的结论对成千上万的开发者来说是真的:“它看起来很丑,但它工作得相当好。”
这个最初看起来像倒退的框架结果证明是一个飞跃:
更快的开发无需切换上下文 更可维护的代码无需CSS考古学 更好的性能通过优化的样式表 无限灵活性无框架约束 团队一致性通过共享的实用类词汇
准备好尝试”丑陋”的方法了吗?
如果你仍在犹豫,Wathan有一条建议:只管试试。 构建一个小组件。体验工作流程。感受速度。
大多数诚实尝试Tailwind的开发者发现了Wathan多年前学到的东西:有时候乍一看看起来错误的方法结果证明是完全正确的。
问题不是Tailwind在你的HTML中看起来是否好——而是它是否让你更有生产力,你的代码更可维护,你的用户体验更好。在所有这些方面,它绝对做到了。
观看完整演讲:Tailwind CSS: It looks awful, and it works - Rails World 2023
开始使用:Tailwind CSS文档
社区:加入Tailwind CSS Discord的讨论