Tailwind 很棒,但我决定换掉了。

MMaximilian Schwarzmüller
Computing/SoftwareSmall Business/StartupsAdult EducationInternet Technology

Transcript

00:00:00对于我目前正在进行的一些新项目,准确地说是大部分新项目,
00:00:05我已经不再使用 Tailwind 了。在这些新项目中我不再使用它,
00:00:11因此也不再使用 Shadcn。这其中是有原因的。当然,原因并不是说 Tailwind 不好,
00:00:18恰恰相反,它是一个非常棒的库。我想先明确这一点。
00:00:22其实做这一期视频我心里也有些纠结,因为
00:00:27就在几周前,我还在谈论 Tailwind 当时面临的巨大财务危机。
00:00:32谢天谢地,从那以后情况大有好转,许多新赞助商加入了。我想
00:00:38他们现在的财务状况已经好多了。毕竟 Tailwind 真的很出色。
00:00:43而且有很多开发者在全身心地为这个项目投入精力。我并不是想说
00:00:49它不好,或者想说服大家不要用它。我只是利用这个频道来
00:00:56分享我的想法、观点以及我对工作方式的一些见解。所以我觉得这可能会
00:01:01很有意思。那么,既然我觉得 Tailwind 很棒,为什么现在不用了呢?这得从头说起。
00:01:07几年前,在 AI 革命爆发前,或者说在 AI 还没这么擅长写代码之前,
00:01:15我和大多数开发者一样,到处都在用 Tailwind。不过,
00:01:21当时最主要的原因是它能让我快速迭代代码。我从来没真正用过 Figma
00:01:28或者类似的工具。当然,也是因为我大多数时候都是一个人工作。
00:01:34如果我独自开发项目,其实没必要使用那些设计工具。对我来说,
00:01:40直接在代码中迭代设计总是更快。我可以边写代码边调整。
00:01:45使用 Tailwind,由于类名是直接内联在 DOM 或 JSX 代码里的,你可以
00:01:50快速更新代码、修改样式,尝试不同的效果。比如微调一下外边距。
00:01:57那是一个非常、非常高效的工作流。这是我当时使用的主要原因,
00:02:04可能也是其他一些开发者的原因。但我知道对于相当一部分开发者,
00:02:10甚至是大多数人来说,另一个强有力的理由是他们讨厌 CSS。我知道 CSS
00:02:17在 Web 开发者中并不受欢迎。我能理解,因为它看起来很复杂,有成百上千个
00:02:23属性和值。没错,确实挺让人头大的。不过我也得说,现代 CSS
00:02:31已经进步了很多。现在的许多操作都比过去容易了。虽然 Flexbox 已经
00:02:37不算是新鲜事物了,但它确实简化了很多工作。再看看 Flexbox 以外的其他领域,
00:02:44获取衍生颜色也比以前容易得多,现在 CSS 已经有了相对颜色(Relative Colors)。
00:02:51顺便提一下,我在 Academind 频道发布过几期视频,专门讨论了现代浏览器
00:02:55和 CSS 的新特性,比如颜色、相对颜色,还有容器查询(Container Queries),它在构建
00:03:01动态缩放组件时非常有用,因为它不依赖视口,而是取决于组件可用的空间。
00:03:08所以 CSS 确实进步巨大。问题是,你基本上也可以在 Tailwind 中使用所有这些
00:03:14现代 CSS 特性,但你也可以直接写原生 CSS。而且现在有了 AI,
00:03:23写原生 CSS 变得更容易了。即使你讨厌写 CSS,只要了解某些特性
00:03:28及其浏览器支持情况就足够了。你可以引导 AI 使用你想要的特性,
00:03:34给它一些文档或解释这些特性的 MDN 文章,AI 就能帮你写好代码。你可能会问,
00:03:39为什么要这么麻烦?为什么不直接用 Tailwind?它不也支持这些现代特性吗?
00:03:45对我来说,大概有“一个半”理由。
00:03:51次要的原因是 Tailwind 并不总能支持所有最新特性。
00:03:58更重要的一点是,AI 肯定不了解所有的 Tailwind 特性。Tailwind 的功能很多,
00:04:05但 AI 并不会全部用上。它总是反复使用那几个类,甚至经常使用旧的类语法,
00:04:13这会导致你错过某些新功能。当然,如果你用原生 CSS,同样的问题也可能发生。
00:04:17如果你不告诉 AI 使用特定的特性,它可能就不会用。但你可以学习几个
00:04:22最重要的 CSS 特性,然后让 AI 去实现。当然,我也明白,
00:04:29你同样可以告诉 AI 使用特定的 Tailwind 特性。也许直接说出几个 CSS 核心特性
00:04:34要比说出 Tailwind 的类名更容易。但再次重申,这并不是我的核心观点。
00:04:40我的核心观点是,我一直在努力减少项目中使用的库的数量,
00:04:48原因有两个。首先,我从事教育内容创作,所以我习惯于
00:04:53把外部库或额外的库视为负担。因为如果我制作一门关于 React 的课程,
00:05:01而课程中又使用了 Tailwind,一旦 Tailwind 发生了破坏性更新,
00:05:07我的代码或课程中的很多部分就会突然失效,从而导致学生提出大量问题,
00:05:12即便 React 这个主线内容并没有任何变化。我明白这只是影响我的一个
00:05:17非常小众的问题,不适用于大多数网站。但即使是构建一个普通的网站,
00:05:23我也认为尽可能少地、合理地使用第三方库是个好主意。
00:05:29当然,我并不是说要极端地排斥每一个库。使用某些库是有充分理由的。
00:05:38比如,如果你在做一个功能丰富的富文本编辑器,使用 Tiptap 之类的库
00:05:44就非常有意义,因为完全手写编辑器太难了。虽说现在有了 AI,
00:05:50在某种程度上比以前容易了,但你还是会遇到很多必须亲自解决的边界情况或问题。
00:05:54即便有 AI 帮忙,它也不是每次都能做对。用过的人都知道。
00:05:59所以,使用第三方库是有理由的。我只是想说,正如我刚才解释的,
00:06:06样式其实是完全可以被替代的部分。我并不是说每个人都应该这么做,
00:06:11但对我来说效果很好。因此,这是一个我可以去掉的库,
00:06:16因为我不介意去审查 AI 给出的 CSS 代码,也不介意在出问题时用原生 CSS
00:06:21去修复样式问题。因为使用 AI 时,总归会有出状况的时候。
00:06:28但我不在乎。如果你非常讨厌看 CSS 代码,那这对你来说
00:06:37显然不是一个选项。但对我而言,我可以因此摆脱 Tailwind。我也可以
00:06:44摆脱 Shadcn,因为我可以构建自己的组件。Shadcn 虽然不是
00:06:50传统意义上的库,但它底层使用了 Radix UI,而据我所知,
00:06:56这个库现在的维护状态存在疑问。这就是为什么即使抛开教学因素,
00:07:00我也想避免使用过多库的真实原因。你添加到项目中的每一个库,
00:07:08一旦停止维护,都可能变成一种负担。到那时,安全漏洞可能无人修复,
00:07:16Bug 也会被搁置。比如 Tailwind 的样式 Bug。新特性也不会再增加了。
00:07:21如果出现了一个新的 CSS 特性而 Tailwind 不再维护了——当然它现在维护得很好——
00:07:29但如果它真的不再维护,你就可能永远无法直接使用那个特性。我们离那种情况其实挺近的。
00:07:35在我之前做的那个谈论他们财务问题的视频里,Tailwind 的创始人发过一贴,
00:07:41说如果他们解决不了这个融资问题,Tailwind 可能会变成“弃置软件”。
00:07:46也许那话说得有点重,或者只是为了博取关注。但不管怎么说,
00:07:52大多数第三方库都有一个共同的问题,就是取决于开发者个人,未来可能不再维护。
00:07:58这就是为什么我个人重新倾向于使用原生 CSS,这一点很重要。我以前一直也是这么做的。
00:08:03我必须再次强调,我祝愿 Tailwind 发展得越来越好,而且我在很多项目中
00:08:11依然在使用它。并不是说我讨厌它,只是我在一些项目中尝试
00:08:17不再使用它。无论对你来说那是 Tailwind 还是别的什么工具,
00:08:22我都会建议——这在 AI 时代之前也是真理——在引入第三方库之前要三思。
00:08:28使用它们有很多好理由,比如用于身份验证的 Better Auth 就非常棒,我肯定会用。
00:08:35但如果是一个可以被替代的库,我觉得值得重新审视或考虑一下。
00:08:41with not using it in some projects. And no matter if that's Tailwind for you or something totally
00:08:46different, I just would – and that was true before the AI era too – I would always consider twice
00:08:53before using a third-party library. There are many good reasons to use them. For example, better auth
00:08:57for authentication is amazing. I would definitely do that. But if there is a library you can replace,
00:09:04it might be worth a second look or thought, I guess.

Key Takeaway

在 AI 辅助编程和现代 CSS 特性飞速发展的背景下,开发者应重新审视引入第三方样式库的必要性,追求更轻量、更易维护的原生解决方案。

Highlights

作者强调 Tailwind 依然是一个优秀的库,并非因为质量问题而弃用。

AI 工具(如 Copilot、ChatGPT)的普及降低了编写原生 CSS 的门槛。

现代 CSS 引入了相对颜色、容器查询等强大特性,功能已非常完备。

减少第三方库的依赖可以降低长期维护成本和避开“弃置软件”的风险。

Shadcn 依赖的底层库(如 Radix UI)的维护状态不确定性是其考量因素之一。

对于教育者而言,减少外部库依赖能有效避免教学案例因库版本更新而失效。

Timeline

立场声明与 Tailwind 的现状

作者首先明确表示他并未否定 Tailwind 的价值,甚至认为它是一个极其出色的工具。他提到自己之所以录制这期视频,是为了分享在新项目中不再使用该库的原因。此前 Tailwind 曾面临财务危机,但目前情况已有显著好转并获得了新的赞助支持。作者强调这仅代表个人在工作流上的见解,而非号召所有人放弃该库。他认为探讨为什么一个资深用户决定改变习惯,对其他开发者会有启发意义。

回溯过往:为何曾深爱 Tailwind

作者回顾了在 AI 革命爆发前,Tailwind 如何成为他快速迭代项目的核心利器。由于他通常独自开发且不习惯使用 Figma 等设计工具,直接在代码中通过内联类名调整样式非常高效。这种“边写代码边设计”的工作流极大地提升了生产力,尤其是在微调外边距和布局时。对于当时的他来说,Tailwind 解决了在不同文件间频繁切换的繁琐感。这是许多开发者选择该库的共同初衷,即追求极致的开发速度。

现代 CSS 的进化与 AI 的赋能

本段重点讨论了 CSS 技术的巨大飞跃,包括 Flexbox、相对颜色和容器查询等新特性。作者指出,现代 CSS 已经解决了许多过去被开发者诟病的痛点,使得直接编写原生样式变得可行。与此同时,AI 的介入彻底改变了游戏规则,即便是不熟悉 CSS 属性的开发者也能通过提示词生成精准代码。只需引导 AI 参考最新的 MDN 文档,它就能利用最前沿的 CSS 特性完成工作。这使得像 Tailwind 这样的抽象层在某种程度上变得不再是刚需。

弃用 Tailwind 的深层技术理由

作者详细解释了放弃 Tailwind 的“一个半”具体理由,首先是 Tailwind 对最新 CSS 特性的支持有时会滞后。其次,AI 工具往往倾向于使用常见的旧版 Tailwind 类名,导致开发者错过了一些更优的新功能。他认为直接向 AI 描述 CSS 核心特性往往比记忆特定的类名更简单直观。通过这种方式,开发者可以更直接地控制底层样式,而不必受限于第三方框架的更新节奏。这种权衡反映了他在灵活性和依赖性之间的取舍。

精简依赖库的长期策略

作为一名教育工作者,作者深知外部库的破坏性更新会给课程维护带来沉重负担。每当库发生重大变化,旧的教学代码就会失效,导致学生产生大量疑问。这种负担同样适用于普通商业项目,因为每个引入的库都是潜在的技术债。尽管他承认某些复杂功能(如富文本编辑器)仍需依赖成熟的库,但样式是可以轻松替代的部分。他宁愿亲自审查 AI 生成的原生 CSS,也不愿在出问题时受制于黑盒工具。这种“少即是多”的理念旨在提高代码的可持续性。

维护性风险与最终建议

最后,作者讨论了开源库可能变成“弃置软件”的风险,特别是对 Shadcn 及其底层库 Radix UI 维护状态的担忧。一旦核心库停止更新,项目中就会残留无法修复的 Bug 和安全漏洞。他通过 Tailwind 创始人的言论提醒观众,任何第三方工具的生命周期都取决于其背后的团队。虽然他在某些存量项目中仍会使用 Tailwind,但在开启新篇章时会优先考虑原生方案。他建议所有开发者在引入任何库(如 Better Auth 或样式库)之前都要三思其必要性。这种审慎的态度能帮助开发者在快速变化的技术浪潮中保持主动权。

Community Posts

View all posts