关于Less
Less是一个css预处理工具, 它拓展了css的语法, 添加了一系列特性.
使用Less
在命令行使用
全局安装Less:
| 
 | 
 | 
- 编译less文件 1lessc styles.less
- 编译less文件并指定文件名 1lessc styles.less styles.css
- 编译less文件并产生压缩后的代码 1lessc --clean-css styles.less styles.min.css
在webpack中使用
在webpack配置中添加loader, 并安装相应loader包 npm install less less-loader css-loader style-loader
| 
 | 
 | 
在客户端使用
引入less库: <script src="less.js" type="text/javascript"></script>
添加less文件: <link rel="stylesheet/less" type="text/css" href="styles.less" />
在node.js中使用
| 
 | 
 | 
Less语法
变量
- 变量属性值 12345@backColor: green;body {background-color: @backColor;}- 编译为: 123body {background-color: green;}
- 变量属性 12345@bkColor: background-color;body {@{bkColor}: red;}- 编译为: 123body {background-color: red;}
- 变量选择器 12345@b: body;@{b} {background-color: yellow;}- 编译为: 123body {background-color: yellow;}
- 变量URL 12345@domain: "http://cdn.suisuijiang.com/";body {background-image: url("@{domain}user_57d65f739e1dc93d74ce4811_1473667014140.gif");}- 编译为: 123body {background-image: url("http://cdn.suisuijiang.com/user_57d65f739e1dc93d74ce4811_1473667014140.gif");}
- 变量做变量名 123456@pink: pink;@other: "pink";body {background-color: @@other;}- 编译为: 123body {background-color: pink;}
- 变量懒加载 - 变量在使用前不需要定义, 可以把定义放在使用后, 变量值使用当前作用域最终值, 当前作用域不存在该变量时则取父作用域最终值 1234567body {@color: red;background-color: @color;@color: yellow;}@color: purple;- 编译为: 123body {background-color: yellow;}
- 变量默认值 - 由于变量懒加载机制的存在, 我们可以定义变量的默认值, 并在需要改变时直接赋其它值 123456// library@base-color: green;// use of library@import "library.less";@base-color: red;
属性继承
- 选择器内继承 12345678.red {background-color: red;}body {&:extend(.red);display: flex;}- 编译为: 1234567.red,body {background-color: red;}body {display: flex;}
- 选择器继承 1234567.lawngreen {background-color: lawngreen;}body:extend(.lawngreen) {display: flex;}- 编译为: 1234567.lawngreen,body {background-color: lawngreen;}body {display: flex;}
- 选择器内的子选择器继承 12345678910.color {.aqua {background-color: aqua;}background-color: red;}body:extend(.color .aqua) {display: flex;}- 编译为: 12345678910.color {background-color: red;}.color .aqua,body {background-color: aqua;}body {display: flex;}
- 继承所有匹配的选择器 12345678910.color.a {background-color: red;}.color.b {&:hover {background-color: blue;}}body:extend(.color all) { }- 编译为: 12345678.color.a,body.a {background-color: red;}.color.b:hover,body.b:hover {background-color: blue;}
- 使用继承比使用属性混合的代码体积更小 - 使用属性混合: 12345678910.my-inline-block {display: inline-block;font-size: 0;}.thing1 {.my-inline-block;}.thing2 {.my-inline-block;}- 编译为: 12345678.thing1 {display: inline-block;font-size: 0;}.thing2 {display: inline-block;font-size: 0;}- 使用继承: 12345678910.my-inline-block {display: inline-block;font-size: 0;}.thing1 {&:extend(.my-inline-block);}.thing2 {&:extend(.my-inline-block);}- 编译为: 123456.my-inline-block,.thing1,.thing2 {display: inline-block;font-size: 0;}
Mixins
- 混合其它选择器属性 123456.base {background-color: red;}body {.base();}- 编译为: 123456.base {background-color: red;}body {background-color: red;}
- 不输出混合 - 在混合名称的末尾加上(), 可以不输出该混合 123456.base() {background-color: red;}body {.base;}- 编译为: 123body {background-color: red;}
- 使用!important 12345678910.base() {background-color: red;}.flex() {display: flex;}body {.base;.flex !important;}- 编译为: 1234body {background-color: red;display: flex ;}
带参数的Mixins
- 多个参数 12345678.size(@width: 100%, @height: 100%) {width: @width;height: @height;}.container {.size(100px, 100px);background-color: red;}- 编译为: 12345.container {width: 100px;height: 100px;background-color: red;}
- 命名参数传递 12345678.size(@width: 100%, @height: 100%) {width: @width;height: @height;}.container {.size(@height: 200px, @width: 100px);background-color: red;}- 编译为: 12345.container {width: 100px;height: 200px;background-color: red;}
- @arguments参数 - @arguments参数包含所有的参数值, 如果你不想用单个的参数值来拼接属性, 就可以直接使用@arguments 12345678.shadow(@x; @y; @blur; @color) {box-shadow: @arguments;}.container {width: 100px;height: 100px;.shadow(0px; 0px; 5px; red);}- 编译为: 12345.container {width: 100px;height: 100px;box-shadow: 0px 0px 5px red;}
Mixins作为函数
在minin中定义的变量和minxins可以在调用者的作用域使用
| 
 | 
 | 
编译为:
因此, 我们可以将Mixin当做函数使用, 比如用于计算的函数
编译为:
 
	 
	