原子css在小程序开发中的应用

本文探讨了原子css在小程序开发中的应用,包括其概念、优缺点、实施初衷及团队如何适应这种新写法。通过统计css规则频率,创建覆盖广泛的需求的原子css库,并提供代码转换工具,减少了样式文件大小,提高了代码复用性,但也带来html代码冗长和阅读困难等问题。文章总结了采用原子css后的项目收益和改进空间。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

原子css在小程序开发中的应用

什么是原子css

原子化CSS 是一种CSS 的架构方式,它倾向于小巧且用途单一的class,并且会以视觉效果进行命名

原子css的具体定义目前已经有很多文章介绍过了,这里不再赘述。简单理解,原子css就是工具类css的极端写法,即一个类名有且仅有一个css规则定义、且该css规则不会重复出现。例如

【图1】

同时html中书写class的方式也有所区别

【图2】

采用原子css有什么好处和弊端?

好处

  • 1、提供css的复用度,减少样式文件大小

根据原子css的定义,所有的css规则最多出现一次,总的来说css规则分两大类:可枚举和不可枚举。 可枚举是指css规则的值是有限的,如position、display等 不可枚举是指css的规则是无限的,如width、top等

  • 2、规避命名的痛苦

传统的写法需要为每个类取名,还得确保类名语义化、好维护,当项目相对较大的时候,往往面临词穷的窘境,做过一段时间开发的应该都深有体会

弊端

  • 1、导致html代码臃肿,且阅读不友好

如图2所示,采用原子css的写法,意味着每个css规则都会对应一个原子css类名。如果某个元素的样式特别复杂,那将是灾难性的,class属性会变得非常的冗长,再加上相同原子css类名不断的重复出现,阅读起来非常的难受;而且html的大小也跟着增加了很多

  • 2、切换书写方式有适应成本

习惯了传统写法,突然改成原子css的写法,会非常的不适应,代码的组织和思维方式稍微有些变化,特别是资深的前端工程师,很难改变原有的习惯,刚接触的时候甚至会导致效率的下降

在小程序开发中采用原子css的初衷

原子css是个很古老的概念的了,很多年前就已经出现,在前端基础设施还不完善的年代,传统写法占据主流,原子css这个话题一直都存在,但却没有流行起来。 几年前在facebook的引领下,原子css再次成为热点,根据facebook分享的数据,经过原子css改造之后其官网样式答复减少,页面加载时间减少了很多。(有兴趣的可以看下facebook官网的源码)

虽然原子css这个话题很热,但一直没有尝试在项目中使用,主要担忧的就是团队成员对它的接受程度,不然团队产出效率降低的锅可是背不起呀。

目前负责的项目是个小程序,已经开发了两年,项目的代码量已经很庞大,最主要的是小程序的访问体验和代码包的大小有直接的关系,且小程序本身有代码包大小的限制。经过各种手段的瘦身之后,包大小有所减少,但如何进一步减少呢?这是一个很大的问题。

经过反编译小程序代码分析,最占空间的wxml和样式,其中wxml代码基本没有压缩的空间,只能从减少代码量这个维度考虑,在需要保持功能不变的情况下,这种方式很难有所作为。经过认真思考,唯一有效的方式就是从样式代码的大小着手,如果实现功能不变但是体积更小。首先想到的是能否压缩类名,尝试了下发现css的规则太多,压缩类名很可能导致出问题,只好放弃这种方式。

正好原子css最大的好处就是减少样式文件的大小,于是决定尝试一下。

我们是如何做的

我们团队维护这个小程序项目的有6个人,每个人的习惯都不太一样,如果一刀切要求大家都采用原子css的写法,势必会影响到正常的需求排期,所以在开始阶段需要做好设计和规划,主要考虑一下几点:

1、允许不使用原子css写法,但是提供工具转换,最终完成时的代码是采用新的写法

2、在熟悉阶段不能太过明显影响到开发效率

3、项目已有代码需逐步转换成新的写法

4、原子css样式覆盖面尽可能的的广,剩余部分仍然采用传统写法

以上3点归纳一下就是开发效率和历史代码的问题,我们采用以下措施来规避这些问题:

1、写脚本统计项目中所有css规则出现的频率,满足一定条件就纳入到原子css中,确保原子css样式库至少能覆盖95%以上的需求;如果是新的项目,可以根据所在团队的实际情况(如命名习惯)、或者参考流程的第三方库(如TailwindCSS),来指定原子css样式库。

2、原子css命名遵循通用规则,确保类名的语义化,减少阅读成本。仅少数高频css规则采用简写,其他一概用全名,如下图所示:

3、制定原子css库时,提供相应的代码片段,借助vscode的智能提示,降低开发者的记忆成本.

4、提供代码转换工具,支持将传统写法转换成原子css的写法,一来解决历史代码的问题,二来也不急着强制所有人都采用新的写法.

给项目和团队带来了哪些好处

还有做的不好的地方

当然原子css并不能解决所有的问题,还有些地方用起来比较别扭。

1. 原子css库并没有覆盖所有的样式,仍然有部分需要采用传统的写法。
2. 存在明显的层级问题,这是不得不采用条件判断或者传统写法来规避。
3. 需要用到伪类的地方无法单独用原子css实现,这时必须采用传统的写法。
4. 并没有完全遵守原子css的规则,仍然保留了部分工具类,如边框、安全区等。
5. 代码转换工具实现的并不完善,多层级样式覆盖会导致转换出现错误,需要人工检查,有一定的成本。 

还可以做些什么

尽管采用原子css后,代码体积下降了多,但之前为了阅读的友好,命名仍然有些长,可以采用短命名替换,通过编译手段进一步降低代码的体积,而不影响到业务功能。

【压缩前】

【压缩后】

----以上是小程序项目中采用原子css开发的一些总结,有什么写得不对或者踩坑的地方,欢迎大家帮忙指正!!!

最后

整理了一套《前端大厂面试宝典》,包含了HTML、CSS、JavaScript、HTTP、TCP协议、浏览器、VUE、React、数据结构和算法,一共201道面试题,并对每个问题作出了回答和解析。

有需要的小伙伴,可以点击文末卡片领取这份文档,无偿分享

部分文档展示:



文章篇幅有限,后面的内容就不一一展示了

有需要的小伙伴,可以点下方卡片免费领取

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值