变量的定义
- 建议所有的变量写在最上面
- 可以把基本变量定义在同一文件
变量的使用
- 多次使用同一属性值
// 使用场景1
@color: #000;
@width: {
left: 320px;
right: 768px;
center: 1024px;
}
div {
width:@width[left];
color:@color;
background:fadeout(@color,75%);
}
// css
div {
width:320px;
color: #000;
background: rgba(0, 0, 0, 0.25);
}
- 对于纯色色值
fadeout函数,表示使用多少的透明度,如果是75%,则代表色值为rgba(0,0,0,0.25)fadein函数设置多少都还是原色值
- 针对本来就是
rgba的色值,如果原本是rgba(0,0,0,0.2)- 使用
fadeout,使用fadeout(@color,10%),则代表色值为rgba(0,0,0,0.1);使用fadeout(@color,20%),则代表色值为rgba(0,0,0,0),大于20都是rgba(0,0,0,0) fadein函数,使用fadein(@color,10%),则代表色值为rgba(0,0,0,0.3)
- 使用
还有很多函数,对数值比较有用
- 多次使用同一属性集
// 使用方法1(可以传入参数)
.bordered {
border-top: dotted 1px black;
border-bottom: solid 2px black;
}
.fd-span {
.bordered;
color: #000;
}
// 使用方法2(不可以传入参数)
@bordered: {
border-top: dotted 1px black;
border-bottom: solid 2px black;
}
.fd-span {
@bordered();
color: #000;
}
// css
.fd-span {
border-top: dotted 1px black;
border-bottom: solid 2px black;
color: #000;
}
// 带参数使用(不传入参数默认使用黑色)
.bordered (@color:black) {
border-top: dotted 1px @color;
border-bottom: solid 2px @color;
}
.fd-span {
.bordered(red);
color: #000;
}
// css
.fd-span {
border-top: dotted 1px red;
border-bottom: solid 2px red;
color: #000;
}
// 可以传多个参数使用逗号隔开,@arguments表示使用所有变量,也可以单独使用变量
//这里使用不太恰当,因为box-shadow和color没有什么必要关联,最好定义的变量耦合性尽可能低
.boxShadowColor(@x:0,@y:0,@blur:1px,@color:#000){
-moz-box-shadow: @arguments;
-webkit-box-shadow: @arguments;
box-shadow: @arguments;
color: @color;
}
.fd-span {
.boxShadowColor(2px,2px,3px,#f36);
}
// css
.fd-span {
-moz-box-shadow: 2px 2px 3px #f36;
-webkit-box-shadow: 2px 2px 3px #f36;
box-shadow: 2px 2px 3px #f36;
color: #f36;
}
模式匹配
// 根据不同的switch匹配不同的值,@_表示匹配所有的值
.mixin (dark, @color) {
color: darken(@color, 10%);
}
.mixin (light, @color) {
color: lighten(@color, 10%);
}
.mixin (@_, @color) {
display: block;
}
@switch: light;
.fd-span {
.mixin(@switch, #888);
}
// css
.fd-span {
display: block;
color:#a2a2a2;
}
嵌套
- 没有必要所有的类都嵌套,可读性不好,可维护性不高
- 像active、伪类可以使用嵌套(&表示同级,.表示子级)
计算
- color可以计算,但是可读性不高,前端对色值理解可能没有那么透彻
- 算术运算符
+、-、*、/可以对任何数字、颜色或变量进行运算
//算术运算符在加、减或比较之前会进行单位换算,计算的结果以最左侧操作数的单位类型为准
//无效的单位换算例如:px 到 cm 或 rad 到 % 的转换,则会忽略单位
@conversion: 5cm + 10mm;// 6cm
@conversion: 2 - 3cm - 5mm;// -1.5cm
@conversion: 2 + 5px - 3cm;// 4px
//乘法和除法不作转换(长度乘以长度就得到一个区域,CSS不支持指定区域,所以没有意义)
@base: 2cm * 3mm; // 6cm
//颜色的算术运算不如色彩函数,最开始介绍的那些
作用域
@var: red;
#page {
@var: white;
#header {
color: @var; // white
}
}
字符串插值
@base-url: "http://assets.fnord.com";
background-image: url("@{base-url}/images/bg.png");
JavaScript表达式
@mainColor:#e92323;
@string: `'hello'.concat(' world')`;
div:before{
background: @mainColor;
content: @string;
}
// css
div:before {
background: #e92323;
content: "hello world";
}
- 编译的好像不能用
JavaScript,只能引入less.js的时候可以使用
可能还有很多没有说到,但是个人觉得写less也不要丢了易读性、维护性和扩展性,现在很多嵌套的易读性都很差更不用说维护性和扩展性了