为什么会出现css预处理器
CSS不是一种编程语言,仅仅只能用来编写网站样式,在web初期时,网站的搭建还比较基础,所需要的样式往往也很简单。但是随着用户需求的增加以及网站技术的升级,css一成不变的写法也渐渐不再满足于项目。没有类似js这样的编程语言所有的变量,常量以及其他的编程语法,css的代码难免会显得臃肿以及难以维护。但是又没有css的替代品,于是css预处理器就作为css的扩展,出现在了前端技术中。
css预处理器的概念
CSS预处理器用一种专门的编程语言,进行Web页面样式设计,然后再编译成正常的CSS文件,以供项目使用。CSS预处理器为CSS增加一些编程的特性,无需考虑浏览器的兼容性问题。 比如说:Sass(SCSS)、LESS、Stylus、Turbine、Swithch CSS、CSS Cacheer、DT CSS等。都属于css预处理器。其中比较优秀的: Sass、LESS,Stylus
SASS
英文单词(Syntactically Awesome Stylesheets)的简写,可翻译为“语法上很棒的样式表”。
网址:https://sass-lang.com/
中文网址:https://www.sass.hk/
Sass是一种动态样式语言,由 Ruby 开发者设计和开发,Sass语法属于缩排语法,比css多出好些功能
(如变量、嵌套、运算、混入(Mixin)、继承、指令、颜色处理、函数等),更容易阅读。
Sass的工作方式是,在Sass源文件中写代码,然后由Sass程序(Sass编译器/转译器)将其转换为最终浏览器能认识的CSS文件。
备注:sass编译器有三种dart-sass(推荐)、Lib-sass/node-sass(不推荐)、ruby-sass(不推荐)
Sass与Scss的关系
Sass的缩排语法,对于写惯css前端的web开发者来说很不直观,也不能将css代码加入到Sass里面,因此sass语法进行了改良,Sass 3就变成了Scss(sassy css)。与原来的语法兼容,只是用{}取代了原来的缩进。
Less
Less也是一种动态样式语言. 受Sass影响较大,对CSS赋予了动态语言的特性,如变量,继承,运算, 函数. Less 既可以在客户端上运行 (支持IE 6+, Webkit, Firefox) (借助less.js),也可在服务端运行 (借助 Node.js)。
网址:https://lesscss.org/
中文网址:https://less.bootcss.com/
Stylus
2010年产生于node社区, 主要用来给Node项目进行CSS预处理支持,人气不如前两者
Stylus被称为是一种革命性的新语言,提供一个高效、动态、和使用表达方式来生成CSS,以供浏览器使用。Stylus同时支持缩进和CSS常规样式书写规则。
需要安装node
Stylus的语法花样多一些,它的文件扩展名是“.styl”,Stylus也接受标准的CSS语法,但是他也像Sass老的语法规则,使用缩进控制,同时Stylus也接受不带大括号({})和分号的语法
网址:https://stylus-lang.com/
中文网站:https://www.stylus-lang.cn/
中文网址:https://www.zhangxinxu.com/jq/stylus/
PostCSS
A tool for transforming CSS with JavaScript
PostCSS 是目前流行的一个对 CSS 进行处理的工具(平台)。PostCSS 依托其强大的插件体系为 CSS 处理增加了无穷的可能性。PostCSS 的主要功能只有两个:第一个就是前面提到的把 CSS 解析JavaScript 可以操作的 AST,第二个就是调用插件来处理 AST 并得到结果。因此,不能简单的把 PostCSS 归类成 CSS 预处理或后处理工具。PostCSS 所能执行的任务非常多,同时涵盖了传统意义上的预处理和后处理。PostCSS 是一个全新的工具,给前端开发人员带来了不一样的处理 CSS 的方式。
PostCSS使用
PostCSS 一般不单独使用,而是与已有的构建工具进行集成。PostCSS 与主流的构建工具,如 Webpack、Grunt 和 Gulp 都可以进行集成。完成集成之后,选择满足功能需求的 PostCSS 插件并进行配置。现在经常用到的是基于PostCSS的Autoprefixer插件,使用方式可以在官网的插件库进行查询。下面是官方插件库地址:PostCSS插件库地址
PostCSS的优点
1.扩展性强
2.兼容性强
3.功能全面
4.有很多插件库供选择
PostCSS的缺点
Sass/Scss与Less、stylus区别
编译环境不一样
Sass 需要Ruby环境
Less 需要引入less.js(浏览器)
Stylus 需要安装node
Sass
$color: #00c; /* 蓝色 */ 1
Less
@color: #00c; /* 蓝色 */ 1
Stylus
mainColor = #00c; /* 蓝色 */ 1
输出风格
SASS输出样式的风格可以有四种选择,默认为nested
nested:嵌套缩进的css代码
expanded:展开的多行css代码
compact:简洁格式的css代码
compressed:压缩后的css代码
处理条件语句有差异
Sass支持条件语句,可以使用if{}else{},for{}循环等等。 LESS的条件语句使用有些另类,他不是我们常见的关键词if和else if之类,而其实现方式是利用关键词“when”。stylus的条件语句的使用和其他编程的条件语句使用基本类似,不同的是他可以在样式去省略大括号
Sass和Less的工具库不同
Sass有工具库Compass, 简单说,Sass和Compass的关系有点像Javascript和jQuery的关系,Compass是Sass的工具库。在它的基础上,封装了一系列有用的模块和模板,补充强化了Sass的功能。
Less有UI组件库Bootstrap,Bootstrap是web前端开发中一个比较有名的前端UI组件库,Bootstrap的样式文件部分源码就是采用Less语法编写。
Archer一个的英文面向移动端的的,基于stylus的样式工具库。
Archer于起源est项目,于专注纯移动端的浏览器的样式展示。如有本地桌面端的需求,请使用 est。
最后总结
不管是Sass,还是Less或者stylus,都可以视为一种基于CSS之上的高级语言,其目的是使得CSS开发更灵活、强大,Sass、stylus的功能比Less强大,基本可以说是一种真正的编程语言了,Less则相对清晰明了,易于上手,对编译环境要求比较宽松。个人在实际开发中更倾向于选择Sass。
————————————————