Less学习笔记

LESSCSS是一种动态样式语言,属于CSS预处理语言的一种,它使用类似CSS的语法,为CSS的赋予了动态语言的特性。
 
LESSCSS可以在多种语言、环境中使用,包括浏览器端、桌面客户端、服务端。
 
编译方法:
 1、浏览器编译
      下载LESSCSS的.js文件,下载地址
  在页面引入:
1 <link rel="stylesheet/less" href="example.less" />
2 <script src="lesscss-1.4.0.min.js"></script>
(LESS文件要在LESS脚本之前引用
  官网上说浏览器端是使用ajax拉取的.less文件,因此要将网站放在服务器端打开,而不能直接在本机打开。
 2、GUI编译工具
      我使用的是koala,一款国人开发的LESSCSS/SASS编译工具。下载地址:http://koala-app.com/index-zh.html
      将less文件编译为对应的.css文件,并由页面引入。
 3、Node.js编译
1  npm install -g less
2  lessc xxx.less xxx.css

 

LESS 拥有四大特性:变量、混合、嵌套、函数。另外,LESS 还拥有一些很有趣的特性有助于我们的开发,例如模式匹配、条件表达式、命名空间和作用域,以及 JavaScript 赋值等等。

 

变量:
1  @padding-none: 0;
2  .page {
3    padding: @padding-none;
4  }
编译后结果:
1  .page {
2    padding: 0;
3  }

 

 

变量可以进行运算:
1  @the-border: 1px;
2  @base-color: #111;
3  #header {
4      background: (@base-color * 13);
5      border-left: @the-border;
6      border-right: (@the-border * 2);
7  }
编译后:
1  #header {
2      background: #dddddd;
3      border-left: 1px;
4      border-right: 2px;
5  }

 

 

变量也可以进行插值:
1  @theURL: "./images";
2  .test2 {
3      background: url("@{theURL}/bg2.jpg");
4  }
编译后:
1 .test2 {
2    background: url("images/bg2.jpg");
3 }
 
 
变量是“按需加载”(lazy loaded)的,因此不必强制在使用之前声明。见下例:
1  .page {
2      width: @width-page ;
3      @width-page: 400px;
4      margin: 0 auto;
5  }
编译结果:
1  .page {
2        width: 400px;
3        margin: 0 auto;
4  }

 

混合(Mixins):
在Less中我们可以定义一些通用的属性,然后在其他属性中使用这些通用属性。
例如:
1  .page {
2       width: 400px ;
3       margin: 0 auto;
4       padding: 0;
5       background: #dddddd;
6  }
7  #header {
8       .page;
9  }
编译后:
1  #header {
2      width: 400px;
3      margin: 0 auto;
4      padding: 0;
5      background: #dddddd;
6  }
 
 
带参数混合,在混合的使用中,我们可以像定义函数一样定义一个可以传入参数的通用属性:
1  .border-radius (@radius) {
2      border-radius: @radius;
3      -moz-border-radius: @radius;
4      -webkit-border-radius: @radius;
5  }
6  .test {
7       .border-radius (50px);
8  }
编译后:
1  .test {
2      border-radius: 50px;
3      -moz-border-radius: 50px;
4      -webkit-border-radius: 50px;
5  }

 

 

另外可以给出参数的默认值:
1  .border-radius (@radius: 25px) {
2      border-radius: @radius;
3      -moz-border-radius: @radius;
4      -webkit-border-radius: @radius;
5  }
6  .test2 {
7      .border-radius ();
8  }
编译后:
1  .test {
2      border-radius: 25px;
3      -moz-border-radius: 25px;
4      -webkit-border-radius: 25px;
5  }
 
 
如果不希望将通用的属性类暴露,在定义的通用属性的时候加上括号:
1  .page () {
2      width: 400px ;
3      margin: 0 auto;
4      padding: 0;
5      background: #dddddd;
6  }
 
 
如果参数很多,可以用arguments的方法一次调用:
1  .box-shadow (@x: 0, @y: 0, @blur: 1px, @color: #888) {
2      box-shadow: @arguments;
3      -moz-box-shadow: @arguments;
4      -webkit-box-shadow: @arguments;
5  }
6  .test2 {
7      .box-shadow(2px, 5px);
8  }
编译结果:
1  .test2 {
2      box-shadow: 2px 5px 1px #888888;
3      -moz-box-shadow: 2px 5px 1px #888888;
4      -webkit-box-shadow: 2px 5px 1px #888888;
5  }
 
 
如果不想限制参数的数量,可以在括号内填...,表示N个参数
1  .margin (...) {
2      margin: @arguments;
3  }
4  .test {
5      .margin(10px 20px);
6  }
编译结果:
1  .test {
2      margin: 10px 20px;
3  }
 
 
LESS 提供了通过参数值控制 mixin 行为的功能:
 1  .radius (big, @radius) {
 2      border-radius: ( @radius + 10 );
 3      -moz-border-radius: ( @radius + 10 );
 4      -webkit-border-radius: ( @radius + 10 );
 5  }
 6  .radius (small, @radius) {
 7      border-radius: ( @radius - 10 );
 8      -moz-border-radius: ( @radius - 10 );
 9      -webkit-border-radius: ( @radius - 10 );
10  }
11  
12  .test3 {
13      @switch: small;
14      .radius(@switch, 20px);
15  }
16  .test3 {
17      @switch: big;
18      .radius(@switch, 20px);
19  } 

 

 

编译结果:
 1  .test3 {
 2      border-radius: 10px;
 3      -moz-border-radius: 10px;
 4      -webkit-border-radius: 10px;
 5  }
 6  .test4 {
 7      border-radius: 30px;
 8      -moz-border-radius: 30px;
 9      -webkit-border-radius: 30px;
10  }

 

 

且参数是有域的:
1  @switch: big;
2  .test3 {
3      @switch: small;
4      .radius(@switch, 20px);
5  }
6  .test4 {
7      .radius(@switch, 20px);
8  }
编译结果依然是:
 1  .test3 {
 2      border-radius: 10px;
 3      -moz-border-radius: 10px;
 4      -webkit-border-radius: 10px;
 5  }
 6  .test4 {
 7      border-radius: 30px;
 8      -moz-border-radius: 30px;
 9      -webkit-border-radius: 30px;
10  }
 
 
 
Guards:
Guards 被用来匹配表达式 (expressions)
 1  .test-guards (@height) when (@height >=100px){
 2      background: red;
 3  }
 4  .test-guards (@height) when (@height <100px){
 5      background: green;
 6  }
 7  .test-guards (@height) {
 8      height: @height;
 9  }
10  
11  .test5 {
12      .test-guards(110px;);
13  }
14  .test6 {
15      .test-guards(90px;);
16  }

 

 

编译后:
1  .test5 {
2      background: red;
3      height: 110px;
4  }
5  .test6 {
6      background: green;
7      height: 90px;
8  } 
 
 
Guards 支持的运算符包括:> >= = =< <。
另外,true关键字是唯一被判断为真的值,也就是这两个混合是相等的:
1  .truth (@a) when (@a) { ... }
2  .truth (@a) when (@a = true) { ... }
而其他不为true的值都会判为假
如  .truth(1) .truth(40)  都不会匹配。
 
 
如果需要根据值的类型匹配混合,可以使用 is* 函数:
1  .mixin (@a, @b: 0) when (isnumber(@b)) { ... }
2  .mixin (@a, @b: black) when (iscolor(@b)) { ... }
几个检查基本类型的函数:
  • iscolor
  • isnumber
  • isstring
  • iskeyword
  • isurl
如果需要检查一个值(数字)使用了哪个单位,可以使用下面三个函数:
  • ispixel
  • ispercentage
  • isem
最后,你可以使用关键词 and 在 guard 中加入额外的条件:
.mixin (@a) when (isnumber(@a)) and (@a > 0) { ... }
或者,使用关键词 not 否定条件:
1  .mixin (@b) when not (@b > 0) { ... }

 

 

嵌套规则:
LESS 可以让我们以嵌套的方式编写层叠样式,如下例:
 1  #content {
 2      -webkit-box-shadow: 1px 1px  1px  #ccc;
 3      -moz-box-shadow: 1px 1px  1px  #ccc;
 4      box-shadow: 1px 1px  1px  #ccc;
 5 
 6     .test6{
 7          -webkit-box-shadow: 3px 4px 2px  #ccc;
 8          -moz-box-shadow: 3px 4px 2px  #ccc;
 9          box-shadow: 3px 4px 2px  #ccc;
10      }
11      &:hover{
12          background: #ddd;
13      };
14  }    
编译结果:
 1  #content {
 2      -webkit-box-shadow: 1px 1px  1px  #ccc;
 3      -moz-box-shadow: 1px 1px  1px  #ccc;
 4      box-shadow: 1px 1px  1px  #ccc;
 5  }
 6  #content .test6 {
 7      -webkit-box-shadow: 3px 4px 2px  #ccc;
 8      -moz-box-shadow: 3px 4px 2px  #ccc;
 9      box-shadow: 3px 4px 2px  #ccc;
10  }
11  #content:hover {
12      background: #ccc;
13  }

 

函数:

 LESS提供了多种函数用于控制颜色变化、处理字符串、算术运算等等。这些函数在函数手册中有详细介绍,手册地址

 

参考资料 LessCss中的语言特性

 
 
 
posted @ 2014-04-01 21:58  一唏  阅读(200)  评论(0编辑  收藏  举报