什么是 CSS 预处理器和 CSS 后处理器?区别?

css预处理器

定义

广义上说,目标为css的预处理器就是css预处理器。本文主要指以最终生成css为目标的领域特定语言。例如:Sass Less Stylus

例子

以less为例

.opacity(@opacity: 100) {
    
    
  opacity: @opacity / 100;
  filter: ~"alpha(opacity=@{opacity})";
}
.sidebar {
    
    
	.opacity(50);
}

将它转换成生产环境css就是

.sidebar {
    
    
  opacity: 0.5;
  filter: alpha(opacity=50);
}

对比上下,你会发现上下的代码编译前后完全是两种不同的语言

实现原理

  • 取到dsl源代码的分析树
  • 将含有动态生成相关节点的分析树转换为静态分析树
  • 将静态分析树转换为css静态分析树
  • 将css静态分析树转换为css代码
    当然,在现实当中css预处理器会更加复杂一些。

优缺点

优点:语言级逻辑处理,动态特性,改善项目结构
缺点:采用特殊语法,框架耦合度高,复杂度高

css后处理器

定义

对css进行处理,且最终生成css的预处理器。
它属于广义上的css预处理器。
例如:clean-css Autoprefixer

例子

Autoprefixer 为例

.container {
    
    
	display: flex;
}
.item {
    
    
	flex: 1
}

转换为生产环境css

.container {
    
    
  display: -webkit-box;
  display: -webkit-flex;
  display: -ms-flexbox;
  display: flex;
}
.item {
    
    
  -webkit-box-flex: 1;
  -webkit-flex: 1;
  -ms-flex: 1;
  flex: 1;
}

可以看到,编译前 与编译后 的代码都是 CSS

实现原理

  • 将源代码作为css解析,获得分析树
  • 对css的分析树进行后处理
  • 将css的分析树转换为css代码

优缺点

优点:使用css语法,容易容易模块化贴进css的未来标准
缺点:逻辑处理有限

css开发模式的变化

原本:dsl源代码 到 生产环境css
现在:dsl源代码 到 标准css 到 生产环境css

猜你喜欢

转载自blog.csdn.net/weixin_51610980/article/details/128553176