文章摘要
作者回顾了8年前使用Tailwind的经历,认为当时它帮助自己解决了CSS结构混乱的问题。最近她将几个网站从Tailwind迁移到原生CSS,发现这个过程既有趣又有意义,开始学习如何更好地组织CSS代码。
文章总结
告别Tailwind:探索CSS结构化之路
作者背景
Julia Evans是一位非全职前端开发者,她的CSS学习经历是断断续续积累多年的。8年前她曾热情地写过发现Tailwind的喜悦,当时她完全不知道如何组织CSS代码。
迁移原因
最近一周,作者将几个网站从Tailwind迁移到更具语义化的HTML+原生CSS,并从中获得了很多乐趣和启发。主要迁移原因包括: 1. 新版Tailwind对构建系统的依赖增强 2. 她项目中存在2.8MB的未优化CSS文件 3. 她的CSS技能已显著提升 4. Tailwind在某些创意CSS实现上存在限制 5. 项目中原生CSS和Tailwind混用导致维护困难
从Tailwind学到的经验
作者发现Tailwind教会了她很多CSS组织方法: 1. 每个CSS代码库都包含多种元素(布局、字体、颜色、通用组件等) 2. 需要系统或规范来管理这些元素 3. 可以借鉴Tailwind中喜欢的系统
新的CSS结构体系
作者建立了一套包含9个方面的CSS规范体系:
1. 重置样式
直接复制了Tailwind的"preflight样式",包括box-sizing: border-box等已成为她习惯的默认设置。
2. 组件化组织
- 每个组件有唯一类名
- 组件CSS互不干扰
- 每个组件有独立CSS文件
- 使用嵌套选择器语法
3. 颜色管理
保留颜色变量集中管理:
css
:root {
--pink: #fea0c2;
--red: #f91a55;
}
4. 字体尺寸
借鉴Tailwind的字体分级系统,使用rem单位:
css
--size-xs: 0.75rem;
--size-sm: 0.875rem;
5. 工具类
保留少量实用类如.sr-only(屏幕阅读器专用)
6. 基础样式
目前仅保留最基础的全局样式:
css
section {
padding: 3rem max(1rem, (100% - var(--inner-width))/2);
}
7. 间距系统
采用更系统化的间距管理,参考: - 猫头鹰选择器 - 无外间距原则
8. 响应式设计
减少媒体查询,更多使用CSS Grid:
css
grid-template-columns: repeat(auto-fit, minmax(min(100%, 400px), max-content));
9. 构建系统
开发时使用原生CSS功能,生产环境使用esbuild打包。
深层思考
作者提到两篇影响她决策的文章: 1. Tailwind与CSS的女性特质 - 关于如何正确看待CSS的复杂性 2. 为什么我们对Tailwind无法达成共识
她认为CSS的难度源于它要解决的本身就是复杂问题,而近年来CSS的新特性(如Grid、Flexbox等)实际上已经大大降低了使用难度。
致谢
特别感谢Melody Starling为wizardzines.com设计的CSS,以及CSS社区分享的大量优质资源。
评论总结
以下是评论内容的总结,平衡呈现不同观点并保留关键引用:
反对Tailwind的观点:
破坏关注点分离原则
- "Tailwind is an anti-pattern that breaks separation of concerns rule" (grzes)
- "Tailwind instead pushes the dev into a CSS-first approach... throw yet-another-div into the DOM" (TonyAlicea10)
影响开发者技能成长
- "Tailwind makes you worse as a web developer... produce future-proof readable HTML" (TonyAlicea10)
- "Every argument boils down to 'I never learnt CSS beyond a junior level'" (JimDabell)
语义化与可访问性问题
- "The opening example on Tailwind’s website is nothing but divs and spans" (TonyAlicea10)
- "HTML is marking up the meaning of the document. You should start there" (TonyAlicea10)
支持/中立Tailwind的观点:
实用性与开发效率
- "Tailwind solved the 'I’m building React components' approach" (TonyAlicea10)
- "Utility classes... what power they bring" (EugeneOZ)
CSS管理替代方案
- "Svelte and LLM completely removed my need for Tailwind" (KolmogorovComp)
- "Angular scopes CSS to components by default" (stephbook)
对传统CSS的反思
- "Separating HTML and CSS... is just burying the head in the sand" (raincol)
- "HTML and CSS are the same kind of concerns: the presentation layer" (raincol)
其他相关观点:
- 技术轮回:
"Nature is healing" (NetOpWibby) / "We’re going a full circle back now" (neya) - 轻量替代方案:
"Pico is usually enough" (BoredPositron) / "Tachyons successor with no build pipeline" (hit8run)
关键争议焦点:
- 开发范式:是否应该坚持HTML语义优先("start with HTML meaning" vs "CSS-first approach")
- 技术选择:Utility框架 vs 传统CSS("avoid CSS collision" vs "write scalable CSS")
- 教育影响:Tailwind是否阻碍开发者深入理解CSS("terrible education for new developers" vs "read the docs")
总结呈现了评论中关于Tailwind的核心争议,包括对其设计理念、开发者技能影响及行业趋势的讨论,同时保留了正反双方的关键论据。