CSS 预处理工具, 可以将其对应的 DSL(领域特定语言)编译为 CSS
基本介绍
Sass/SCSS
Sass 2007 年诞生, 最早也是最成熟的 CSS 预处理器, 拥有 Ruby 社区的支持和 compass 这一最强大的 CSS 框架
Sass 的缩排语法, 对于写惯 CSS 前端的 web 开发者来说很不直观, Sass 不兼容 CSS 代码
Sass3 就变成了 SCSS(sassy CSS) 与原来的语法兼容, 只是用 {} 取代了原来的缩进
Sass 的运行 依赖于 Ruby 环境(compass 将 Sass 编译为 CSS)
现在可用 node-Sass 来编译 Sass/SCSS 文件
node-Sass 是一套在 node.JS 用 LibSass 編 Sass/SCSS 的工具
原始的 Sass 是用 Ruby 编写的, 所以需要 Ruby 环境, libSass 是原始 Sass 引擎的一个 c/c++ 接口, 使用它编译 Sass 不依赖于 Ruby, 可以使用其他语言使用 libSass
安装 node-Sass 时, 会去 GitHub 下载一个 .node 的文件而这个文件托管在墙外的服务器上, 所以失败了 node-Sass 安装失败解决方案
以 .Sass 或 .SCSS 为文件后缀名称(现在一般都是用 SCSS)
Less
Less 2009 年出现, 受 Sass 的影响较大, 但又使用 CSS 的语法, 让大部分开发者和设计师更容易上手, 在 Ruby 社区之外支持者远超过 Sass, 其缺点是比起 Sass 来, 可编程功能不够, 不过优点是简单和兼容 CSS, 反过来也影响了 Sass 演变到了 SCSS 的时代, 著名的 Twitter Bootstrap 就是采用 Less 做底层语言的.
Less 可以使用 Less.JS 在浏览器运行时中解析 Less 代码
也可以在 node 环境中 安装 Less, 提前编译 Less 文件
- NPM install -g Less &lessc styles.Less styles.CSS
- (可以加参数控制编译后的 CSS 排版及压缩)
以 .Less 为文件后缀名称
stylus
Stylus,2010 年产生, 来自 Node.JS 社区, 主要用来给 Node 项目进行 CSS 预处理支持, 由 TJ 大神开发
安装及编译
- NPM install stylus -g & stylus src/
- (可以加参数控制编译后的 CSS 排版及压缩)
以 .styl 为文件后缀
使用现状
现在一般都是配合 webpack 使用这几种预处理语言, 需要先
安装 编译器, 对应 loader
, 然后再
module.rules 配置其具体规则
基本语法
Less 基本语法属于 CSS 风格, 而 Sass,stylus 利用缩进, 空格, 换行来减少需要输入的 字符
目前 SCSS, stylus 也可以支持 CSS 风格, 用大括号 来书写
变量符 @ $ 无变量符号直接变量名
- Less
- @size: 10px;
- .box {
- width: @size;
- }
- SCSS
- $red: #c00;
- strong {
- color: $red;
- }
- stylus
- red = #c00
- strong
- color: red
CSS 的变量规范
- /* global scope */
- :root {
- --red: #c00;
- }
- strong {
- color: var(--red);
- }
Web 前端开发学习 Q-q-u-n: 731771211, 分享学习的方法和需要注意的小细节, 不停更新最新的教程和学习方法(详细的前端项目实战教学视频, PDF)
* 变量作用域: Less 惰性加载, Sass,stylus 就近加载
嵌套语法一致, 用 & 引用父集 -- 嵌套不建议超过 4 层
* Less 不支持跳出嵌套
* Sass `@at-root`
@at-root 支持参数, 跳出不同的嵌套
without: all, 表示所有
without: rule, 表示常规 CSS,rule 是默认值
without: media, 表示 media
without: support,@support 现在使用还不广泛
- // child1 将跳出 parent 的嵌套
- .parent1{
- color:#f00;
- @at-root .child1 {
- width:200px;
- }
- }
- }
插值
- Less
- @prefix: ui;
- .@{prefix}-button {
- color: #333;
- }
- Sass
- $prefix: ui
- .#{$prefix}-button {
- color: #333;
- }
- stylus
- prefix = ui
- .{prefix}-button
- color #333
混入(mixin): 预处理器最精髓的功能, 样式层面上的抽象(相当于 copy 代码片段)
Less 直接引入
SCSS 要先声明 @mixin, 使用时 @include
继承
函数
逻辑控制: Sass, stylus 支持 if else for each while, Less 使用 mixin when 处理
具体语法看官方文档
总结:
Sass 大而全, 出现时间最久, 但依赖于 Ruby (compass)
Less 可以平滑的从 CSS 过度而来, 可以在运行时解析, 逻辑功能有些缺失
stylus 起源 Node.JS 社区, 语法灵活, 有一个官方开发的样式库 nib, 同样提供了不少好用的 mixin
Postcss 是什么样的一种存在?
PostCSS 既不是预处理器也不是后处理器, 而是一个平台, 其本身并不处理任何具体任务, 只有当我们为其附加各种插件之后, 他才具有实用性
PostCSS 就像是一个使能器(enabler), 他可以不用完全替代现有的预处理器或后处理器, 而只是作为他们的补充工具. PostCSS 的工作机制主要包含解析代码, 执行插件, 渲染结果三部分:
PostCSS 会将 CSS 代码解析成包含一系列节点的抽象语法树(AST, Abtract Syntax Tree).
PostCSS 常用插件 (用这些插件集合其实已经可以代替 三大 CSS 预处理器)
cssnext, 未来语法, 颜色函数...
postcss-import, 导入文件
autoprefixer, 自动前缀
precss, 集成 Sass 预处理器, 功能强大包括 autoprefixer mixins
postcss-mixins, 混合宏, 是用类似 Sass 的混合宏, 不可与 precss 混用
postcss-conditions 逻辑判断
...
目前 Postcss 在一般项目中的用途
使用其 autoprefixer 插件, 为 CSS 属性增加前缀
创建 postcss.config.JS
- // webpack.config.JS
- {
- test: /\.Less$/,
- loader: ExtractTextWebpackPlugin.extract([
- {loader: 'css-loader', options: { minimize: true }},
- 'postcss-loader', // 要在预处理器处理完之后, 在使用 postcss-loader
- 'less-loader',
- ]),
- }
- // postcss.config.JS
- module.exports = {
- plugins: [
- require('autoprefixer')({
- 'browsers': ['> 1%', 'last 2 versions']
- })
- ]
- }
Web 前端开发学习 Q-q-u-n: 731771211, 分享学习的方法和需要注意的小细节, 不停更新最新的教程和学习方法(详细的前端项目实战教学视频, PDF)
```
来源: http://www.jianshu.com/p/db877b267192