1. 什么是CSS预处理器
- 是基于CSS的另一种语言,通过工具编译成CSS,添加了很多CSS不具备的特性,能提升CSS文件的组织性
- 主要有
- less 基于node 用js写的 编译速度快 有可以在浏览器可以直接使用的版本,不需要预先编译
- sass 基于ruby
- 功能
- 嵌套 反映层级与约束
- 变量和计算 减少重复代码
- extend和mixin 代码片段
- 循环 适用于复杂的有规律的样式
- import CSS文件模块化
2. less
- less文件
@fontSize:12px; @bgColor:red; .wrapper{ background:lighten(@bgColor, 40%); .nav{ font-size: @fontSize; } .content{ font-size: @fontSize + 2px; &:hover{ background:@bgColor; } } }
- 编译的css文件
.wrapper { background: #4dff4d; } .wrapper .nav { font-size: 16px; } .wrapper .content { font-size: 18px; } .wrapper .content:hover { background: green; }
- 背景颜色变浅40%会编译成具体的颜色 - 字体大小增加了2px
-
@fontSize: 12px; @bgColor: red; .box(){ //加了()不会被编译 color:green; } .box1{ .box(); //复用box中的样式 line-height: 2em; } .box2{ .box(); line-height: 3em; } .block(@ft){ font-size: @ft; border: 1px solid #ccc; border-radius: 4px; } .wrapper{ background:lighten(@bgColor, 40%); .nav{ .block(@fontSize); } .content{ .block(@fontSize + 2px); &:hover{//如果内层有伪类 伪元素选择器,前面需要加& background:red; } } }
-
@fontSize: 12px; @bgColor: red; .block{ font-size: @fontSize; border: 1px solid #ccc; border-radius: 4px; } .wrapper{ background:lighten(@bgColor, 40%); .nav:extend(.block){ color: #333; } .content:extend(.block){ // 或 &:extend(.block); &:hover{ background:red; } } }
- extend 表示由block复用过来
-
.gen-col(@n) when (@n > 0){ .gen-col(@n - 1); .col-@{n}{ width: 1000px/12*@n; } } .gen-col(12);
3. sass
- 安装sass
npm install node-sass
这个安装的比较慢可以把镜像切换成淘宝 - scss文件编译成css文件
node-sass demo.scss>demo.css
- sass输出可以有多种格式
- 默认保留嵌套格式
- 去掉嵌套格式
node-sass --output-style expanded demo.scss>demo.css
-
sass与less写法的差别:将@变成$
-
mixin
-
$fontSize: 12px; $bgColor: red; @mixin block($ft){ font-size: $ft; border: 1px solid #ccc; border-radius: 4px; } .wrapper{ background:lighten($bgColor, 40%); .nav{ @include block($fontSize); } .content{ @include block($fontSize + 2px); &:hover{ background:red; } } }
-
$fontSize: 12px; $bgColor: red; .block{ font-size: $fontSize; border: 1px solid #ccc; border-radius: 4px; } .wrapper{ background:lighten($bgColor, 40%); .nav{ @extend .block; color: #333; } .content{ @extend .block; &:hover{ background:red; } } }
-
@for $i from 1 through 12 { .col-#{$i} { width: 1000px/12*$i; } }
4. 预处理器框架
- sass compss
- less lesshat EST