🙂日拱一卒:什么是 CSS 原子化?优缺点是什么

469 阅读4分钟

什么是 CSS 原子化?

CSS 原子化是指将 CSS 的样式拆分为极小的、独立的单元,每个单元只负责一个单一的样式规则。这些样式通常以类名的形式存在,直接应用到 HTML 标签上,从而实现样式的组合和复用。常见的原子化工具或框架有Tailwind CSS,unocss,windi css。

<div class="text-center text-red-500 font-bold">Hello World</div>

比如上面代码中,text-centertext-red-500font-bold 就是原子化类名,每个类只表示一种单一的样式。

如果不用原子化,我们声明一个样式的时候,是对一个类中声明各种样式,然后应用到html上

.test{
    color:red;
    width:200px;
    padding:6px
}

但如果使用了css原子化,简单来说就是把他们给打散,用单独的类去表示一个样式,可以重复使用,复用率比较高,避免重复的书写代码

在开发后台管理系统时,页面功能繁多但样式相对简单,快速搭建页面更为重要。使用 CSS 原子化工具(如 Tailwind CSS),可以快速完成布局和样式设计。

<div class="flex items-center justify-between p-4 bg-gray-100">
  <h1 class="text-lg font-bold text-gray-800">Dashboard</h1>
  <button class="bg-blue-500 text-white px-4 py-2 rounded">Add</button>
</div>

CSS 原子化的优点

  1. 复用性高 :通过在开发前预定义的类名或者是使用tailwind库,我们可以快速编写和调整样式,使用库的话,即使是不同的项目之间,都能直接使用。

  2. 开发效率高 :如果是c端需要经常使用到样式的话,可以减少我们基本上30%-40%的时间出来,而不需要一直切换到 CSS 文件修改样式。

  3. 减少命名冲突 :避免传统 CSS 中复杂的命名,也避免了某些开发者乱命名的问题,只需使用原子化类名即可。不会出现全局样式污染的问题。

  4. 提高可维护性 : 由于所有的样式都来源于工具类,代码清晰直观,无需追踪样式规则的定义位置。

  5. 减少文件体积 : 通过工具去除未使用的类名,减小最终生成的 CSS 文件体积。

CSS 原子化的缺点

  1. 类名冗长,HTML 不够简洁:虽然用的方便,但是大量使用原子化类名可能会导致 HTML 代码变得冗长,可读性比较低,一长串比较难看出来。
<div class="w-1/2 p-4 m-2 bg-gray-200 text-black text-center font-bold"></div>

但是这个问题可以使用tailwind中的css组件化来进行解决

/* 定义一个按钮组件 */
.btn {
  @apply px-4 py-2 bg-blue-500 text-white rounded hover:bg-blue-600;
}

/* 定义一个警告消息组件 */
.alert {
  @apply p-4 bg-yellow-100 text-yellow-700 border border-yellow-400 rounded;
}

  1. 学习成本:我们熟悉大量的工具类名称,可能需要时间适应和记忆,但也可以借助vscode的代码提示功能来避免这个问题。

  2. 定制性受限:使用原子化 CSS 时,灵活的自定义样式需要额外的配置,不能完全脱离框架进行自由开发。

  3. 打包体积增大:由于引入了库,库中会有大量完整的样式,也就会导致包的体积比较大,但是我们可以通过工程化的插件来减少一些没有使用的样式,从而减小体积,也就是常见的css treeshaking

  4. 代码复用难度增加:虽然说样式的复用性高,但是如果多个地方复用相同的样式,没有单独定义一个通用类的话,后续调整可能需要修改多个地方,会导致代码的复用难度比较高。

总结

CSS 原子化是一种以效率优先的样式管理方式,特别适合快速开发的场景。适合短期项目或者需要快速开发的场景,比如项目样式不复杂,注重效率而非代码结构的项目,还有移动端、后台管理系统等注重 UI 快速搭建的场景,但在样式需求复杂或代码结构要求较高的项目中,可能需要搭配css的组件化,权衡利弊后决定是否采用原子化。

如果觉得有趣或有收获,请关注我的更新,给个喜欢和分享。您的支持是我写作的最大动力!

往期好文推荐