跳到主要内容
返回

论 Tailwind 的兴起

从 BEM 的维护困境与原子类思想出发,介绍 Tailwind 的核心概念、优势及适用方式。

Tailwind介绍

前言

众所周知,CSS是一个相对简单且语法宽松的语言,虽然对开发者友好,但因为它过于“随意”且耦合性强(如height和line-height都会对元素的高度造成影响),如果开发时不做限制,对后续维护的人员来说将会造成“毁灭性打击”。

img

故为了样式代码的可读性,也为了减少维护人员的理解难度,我们需要对CSS的编写做出限制

BEM命名规范 😀

一般来说,我们编写CSS时类名会遵循BEM命名规范,这种规范的特点是语义化、结构化、遵循开闭原则。参考知乎——CSS之BEM命名规范

“开闭原则”指对修改封闭、对扩展开放,是面向对象思想的重要基本原则

BEM规范存在的问题 😐

实际上,可以通过一些CSS预处理器的如 @extend 等功能实现复用,但会对后续维护造成很大的困扰

![img](../../assets/posts/wordpress/2024/01/tw-1.png)

原子类

原子类,指具有“原子性”的CSS类

在化学反应中“原子”是最小的单位,故“原子性”指具有不可拆解、不可更改的性质

示例:

.flex {
    display: flex;
}

上面的.flex就是一个原子类,它的特点就是一个类名对应一个CSS规则,并且类名应该是和规则有关系的

原子类的思想可以说与我们常用的BEM规范“背道而驰”,BEM强调的是语义化与将CSS从HTML的关注点分离(实际上很可能没有分离),而原子类几乎摒弃了语义化,通过使用提供的大量工具类使页面符合最终的设计决策

Tailwind基本概念

Tailwind就是一个采用了CSS原子类和“All in JS”思想的框架

“All in JS”指“HTML in JS”和“CSS in JS”,其中“HTML in JS”就是Vue、React等框架在做的事

框架特点

效果参考2023 GitHub最热门的前端UI项目——shadcn

基本原理

PostCSS 本身是一个功能比较单一的工具。它提供了一种方式用 JavaScript 代码来处理 CSS。它负责把 CSS 代码解析成抽象语法树结构(Abstract Syntax Tree,AST),再交由插件来进行处理。插件基于 CSS 代码的 AST 所能进行的操作是多种多样的,比如可以支持变量和混入(mixin),增加浏览器相关的声明前缀,或是把使用将来的 CSS 规范的样式规则转译(transpile)成当前的 CSS 规范支持的格式。

浏览器厂商在实现某个 CSS 新功能时,会使用特定的浏览器前缀来作为正式规范版本之前的实验性实现。比如 Webkit 核心的浏览器使用-webkit-,微软的 IE 使用-ms-。为了兼容不同浏览器的不同版本,在编写 CSS 样式规则声明时通常需要添加额外的带前缀的属性。这是一项繁琐而无趣的工作。 Autoprefixer 可以自动的完成这项工作。Autoprefixer 可以根据需要指定支持的浏览器类型和版本,自动添加所需的带前缀的属性声明。开发人员在编写 CSS 时只需要使用 CSS 规范中的标准属性名即可。

其他

基本使用

官方文档中对Tailwind框架的安装、配置与使用说明已经非常详细了,故不多做赘述。Tailwind中文官网

个人体验

优点:

缺点:

总结

当然,混合使用BEM规范与原子类框架也不会有什么冲突,如果既想简化开发,又想给样式覆盖加上兜底方案的话(但这样我们又得给类起名了☹️)

img


分享这篇文章: