随着技术的发展,目前css已经发展到了第三阶段css3.css3可以支持更多的动效,之前须要用js来实现的动画、过渡,计算等功能,现在大多都可以用css来实现,并且性能更佳。固然,随着业务的须要,在编写css过程中,为了可以让css具有js的可复用性,灵活性、模块化开发以及更好的管理样式文件,像sass这样的css框架就应运而生。
sass可以解决css一些缺憾,包括但不限于:css
1.变量:声明一个变量,多处使用html
$content: "Non-null content";前端
.main {
content: $content;
}
编译为
.main {
content: "Non-null content”;
}node
2.嵌套:可以更好的明确父子层级关系,方便修改查找以及减小样式命名react
.main {webpack
.redbox { background-color: #ff0000; color: #000000; }
}
编译为
.main .redbox {css3
background-color: #ff0000; color: #000000;
}web
3.引用混合样式:一处定义,多处使用npm
编译前:编程
@mixin clearfix {
display: inline-block;
&:after {
content: "."; display: block; height: 0; clear: both; visibility: hidden;
}
}
.box{
@include clearfix
}
编译为:
.box{
display: inline-block;
}
.box:after{
content: "."; display: block; height: 0; clear: both; visibility: hidden;
}
4.函数指令:像js同样开始编程
$grid-width: 40px;
$gutter-width: 10px;
@function grid-width($n) {
@return $n * $grid-width + ($n - 1) * $gutter-width;
}
.sidebar { width: grid-width(5); }
编译为
.sidebar { width: 240px; }
以上4种是最为常见的,更多用法,请自行到Sass官网了解。
Css预处理器让前端开发人员大大提高了css开发速度,跟sass类拟的还有less,Stylus。
1.基于Ruby,使用sass必须安装Ruby,内部是使用Ruby来编译的。
2.须要安装node-sass.目前前端都使用了gulp,webpack这些构建工具,那么若是用sass的话,webpack构建必须安装sass-loader,而sass-loader又依赖于node-sass,要知道node-sass安装速度极其慢,特别是使用window系统开发时,npm<5.4时,常常会出现node-sass安装不成功的状况。
3.全局变量的污染,在多人开发过程中,定义选择器时,须要顾及到其余地方是否使用了一样的命名。
4.静态编译:预先编译,展现来页面当中的是已经编译好的css.
4.不支持将来的css。目前处于css3阶段,将来css发展方向值得期待,将来的CSS中将会支持更多的属性以及函数,其中不乏有变量,嵌套,值计算等。
postcss定义:
PostCSS is a tool for transforming CSS with JS plugins. These plugins can support variables and mixins, transpile future CSS syntax, inline images, and more.
postcss的优势:
1.支持将来的css: 使用cssnext书写将来的css(postcss-cssnext plugin)
:root {
--heading-color: #ff0000;
}
/ custom selectors /
@custom-selector :--headings h1, h2, h3, h4, h5, h6;
/ usage /
:--headings {
color: var(--heading-color);
}
经过 cssnext,上述代码会被处理成如下内容
h1,
h2,
h3,
h4,
h5,
h6 {
color: #ff0000;
}
2.编译速度大大提高。PostCSS 声称比预处理器快 3-30 倍。
3.丰富的插件系统,解放你的双手。
4.css模块化,将做用域限制于组件内,避免了全局做用域的问题,不再用担忧样式名重复了
Postcss属于css后处理器,动态编译css,也就是说,在运行的时候进行编译。
Postcss自己不会对你的css作任何事物,你能够把postcss当作一个壳,伴随着postcss的生态,衍生出更多postcss插件,可以帮你解决95%以上的css疑问,若是你须要自定义一个属于本身业务需求的css编写规范,那么你也能够为此开发一个特定的postcss plugin.
npm安装postcss-loader,postcss-cssnext: npm install postcss-loader postcss-cssnext -D
webpack.config.js