跳至内容
THE GUILD
0%
服务 产品 招聘 关于我们 博客 常见问题 联系我们
看起来很丑,但它有效:为什么Tailwind CSS实际上很出色

“我实在想不出任何话能说服你,在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开发者喜极而泣的东西——真正有意义的响应式设计:

Tailwind响应式网格布局

<!-- 移动优先的响应式网格 -->
<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深色模式实现

想深入了解深色模式的可能性?查看全面的深色模式文档了解高级技术和自定义选项。

秘密武器:数据属性和状态管理

这里是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变量动态主题

强大之处? 你的用户可以通过管理界面自定义颜色,这些更改立即应用于复杂的悬停状态、焦点环和任何其他交互元素——不需要CSS编译。

维护现实检验

Wathan抛出这个真相炸弹:“维护CSS很难。这就是为什么有课程、书籍和带有时髦名字的不同CSS方法论架构。从来没有人争论过如何写可维护的HTML。”

数字支持这一点:

  • 当一切都是实用类时零CSS优先级战争
  • 更改一个组件没有神秘的副作用
  • 几个月后回来时立即理解
  • 自信删除——删除HTML,样式自动删除

为什么传统CSS开发者正在转变

从已经做出转变的开发者那里的证词是非凡的:

“我怀疑了好几个月。类看起来丑陋和错误。但在用Tailwind构建了一个项目后,我无法回去了。开发速度和可维护性简直无可比拟。” - 资深前端开发者

“切换到Tailwind后,我们的CSS包大小减少了60%,开发时间减少了40%。学习曲线是值得的。” - 技术负责人

Tailwind开发者生产力

值得付出的学习曲线

是的,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的讨论