原子化CSS与CSS预编译器的对比

前言

        本文章将从多个角度来分析对比原子化css(文中以Unocss为例)和CSS预编译器(以sass为例)。

什么是原子化css?

        想象一下,你要搭积木盖房子。原子化CSS就像是一堆特别小的积木块,每个积木块都只能干一件很简单的事儿。比如说,有个小积木块就只能让字变成红色,还有个小积木块就只能把背景弄成蓝色。你要盖一个好看的房子(也就是做出一个网页样式),就得把这些小积木块一个一个组合起来。像这样的小积木块对应的就是原子化CSS里那些一个个小的类(class)。

        用专业的话来说:

        原子化CSS倾向于创建小巧且单一用途的class,并以视觉效果进行命名。例如,一个类可能只负责设置文本颜色为白色,另一个类可能只负责将文本居中对齐。通过组合这些单一用途的类,可以构建出复杂的UI样式,而不需要为每个组件单独编写样式。

        常见的原子化css框架有Unocss、Tailwind CSS以及Windi CSS等。

CSS预编译器又是什么鬼呢?

        CSS预编译器就像是一个魔法盒。你把普通的CSS规则放进去,它就能给你变出新花样。比如说,你可以告诉这个魔法盒,“我想要一个代表主要颜色的东西”,然后你在魔法盒里定义一个变量(就像给这个颜色取个名字),以后只要用到这个颜色,就直接用这个变量名就行。而且这个魔法盒还能让你把CSS规则像套娃一样一层套一层(这就是嵌套),还能把一些常用的样式组合成一个新的样式,就像把几个小魔法组合成一个大魔法(这就是混合)。

        CSS预编译器对于前端开发者应该并不陌生,常见的有sass、less、stylus。

样式编写方式对比

原子化css:

就像我刚刚说的搭积木。你在HTML里就一个劲儿地往元素上堆那些小积木块的类名。比如说你有个<div>标签,你想让它里面的字是白色,背景是黑色,还居中,你就写<div class = "白色字的类名 黑色背景的类名 居中的类名">。这些类名都是原子化CSS预先定义好的,每个类名就负责一个很简单的样式效果,例如:

<div class="text-white bg-black text-center">hello Atomic CSS</div>

眼熟?对,和以前的bootstrap的写法很像。

CSS预编译器

你得先在那个魔法盒(预编译器的文件)里捣鼓。比如说你用Sass,你可能会先写个类似$mainColor: red;(定义一个变量表示主要颜色是红色),然后再写一个样式块,像这样:

$mainColor: red;

.myDiv {
    color: $mainColor;
    background-color: black;
    text-align: center;
}

然后这个样式会被编译成普通的CSS给浏览器看。

样式复用方面对比

原子化CSS

        那些小积木块(原子类)是全局的,到处都能使。不管你是做网页的头部、中部还是底部,复用性强

CSS预编译器

        复用的话,就靠那些你在魔法盒里捣鼓出来的东西。通过定义变量、混合等方式实现复用。

性能方面对比

原子化CSS

        可以实现按需加载,只生成实际使用到的样式,减小CSS文件体积。

CSS预编译器

       通常需要编译整个样式文件,可能包含未使用的样式代码,体积可能较大。

灵活性对比

原子化CSS

        有点死脑筋。要是你想做个特别复杂的样式,比如说一个菜单,菜单里的子菜单有特殊的样式,你可能得写好多小积木块的类名堆在一起。就像你要搭一个超级复杂的城堡,可能得用好多好多小积木块,而且还得小心翼翼地组合,不然就容易乱套。

CSS预编译器

       灵活性高。因为它有那些像变量、嵌套、混合之类的魔法手段。

局限性

原子化CSS

        可读性低:HTML中大量类名可能导致代码可读性下降

        灵活性有限:对于复杂嵌套或特定交互样式不够方便。

        难以调试:样式问题排查时,需要逐个排查相关类名。

CSS预编译器

        学习曲线较高:需要学习预处理器的语法,如Sass的变量、嵌套规则、混合等。

        编译依赖:CSS预编译器需要编译成普通的CSS才能被浏览器识别,这意味着在开发过程中需要依赖编译工具。

        性能问题:如果不合理使用,可能会导致生成的CSS文件体积过大,从而影响页面的加载速度。

总结

        各有优劣,该怎么选呢?各位就仁者见仁智者见智了。

        不过小编更想二者结合使用,如果一些常用的基本样式用unocss,比如常用的width、height、margin、padding、text-align:center、cursor:pointer,其他跟业务相关的用sass,是否可行呢?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

妍思码匠

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值