(一)嵌套规则
【1】less可以让我们以嵌套的方式编写层叠样式,先看下面这段CSS;
.box-a .hd { height: 20px;}.box-a .bd .txt { color: #000;}.box-a .other { position: relative;}
在LESS中,可以用嵌套方式写以上代码:
.box-a{ .hd{ height:20px; } .bd{ .txt{ color:#000; } } .other{ position:relative; }}
代码变更简洁与直观,与DOM树结构很相似。
【2】&符号
如果在嵌套规则中,想写串联选择器,而不是写后代选择器,可以用&符号,如:hover伪类写法
.box-a{ .hd{ height:20px; a{ &:hover{ color:#000; } } }}
编译后:
.box-a .hd { height: 20px;}.box-a .hd a:hover { color: #000;}
(二)变量
【1】定义
@名:值;(需要在末尾加上分号)
@color:#f60;p{ background-color:@color;}
编译后:
p { background-color: #ff6600;}
【2】字符串插入变量值
@url:'../images/';p{ background:url('@{url}sp.png');}
编译后:
p { background: url('../images/sp.png');}
【3】变量之间赋值
@url:'../images/';@pageurl:@url;p{ background-image:url('@{pageurl}xxxx.jpg');}
编译后:
p { background-image: url('../images/xxxx.jpg');}
【4】预解析
(1)Less的变量调用,不需要在变量声明后才可以使用;
(2)同一个变量定义多次,在当前作用域中最后一次定义的将被使用
p{ background-image:url('@{url}xxxx.jpg');}@url:'../images/';@url:'http://www.xx.com/';
编译后:
p { background-image: url('http://www.xx.com/xxxx.jpg');}
(三)混合(Mixins)
【1】调用已有的class或id属性集
#modA{color:#000;}.fl{float:left;}p{ #modA; .fl;}
编译后:
#modA { color: #000;}.fl { float: left;}p { color: #000; float: left;}
【2】带参数(或者空参数)的混合,编译后不会暴露在css文件中
#modA(){color:#000;}.fl(){float:left;}p{ #modA; .fl;}
编译后(CSS文件没有混合模块的代码):
p { color: #000; float: left;}
【3】设置默认参数
.mixins(@w;@h:100px){ width:@w; height:@h;}p{ .mixins(50px);}
编译后:
p { width: 50px; height: 100px;}
【4】参数
(1)多个参数可以使用分号或者逗号分隔,推荐使用分号分隔,因为逗号有两重含义:它既可以表示混合的参数,也可以表示一个参数中一组值的分隔符。
(2)如果在混合的定义或者是调用中找到至少一个分号,就会假设参数是使用分号分隔的,所有的逗号都属于参数中的一组值的分隔符。
.mixins(@font;@h){ font:@font; height:@h;}p{ .mixins(12px 'Microsoft yahei',arial;50px);}
编译后:
p { font: 12px 'Microsoft yahei', arial; height: 50px;}
(3)...设置不限制参数的个数;@arguments获取全部的参数值
.mixins(...){ -webkit-transform:@arguments; -moz-transform:@arguments; -ms-transform:@arguments; -o-transform:@arguments; transform:@arguments; }p{ .mixins(translate(-10px,-10px));}
编译后:
p { -webkit-transform: translate(-10px, -10px); -moz-transform: translate(-10px, -10px); -ms-transform: translate(-10px, -10px); -o-transform: translate(-10px, -10px); transform: translate(-10px, -10px);}
【5】同名混合不会覆盖,符合且都会调用
.mixins(){ overflow:hidden;}.mixins(){ font:0;}p{ .mixins();}
编译后:
p { overflow: hidden; font: 0;}
【6】匹配
(1)根据参数数量匹配
.mixins(){ overflow:hidden;}.mixins(@fz){ font:@fz;}.mixins(@w;@h){ width:@w; height:@h;}p{ .mixins(10px);}
编译后:
p { font: 10px;}
(2)指定匹配
.mixins(baidu){ overflow:hidden;}.mixins(winds){ font-size:0;}p{ .mixins(baidu);}
编译后:
p { overflow: hidden;}
【7】表达式匹配Guards,支持的表达式匹配运算符包括:>>===<< (注意:相等是 = )
(1)单个条件
.mixins(@type) when(@type=baidu){ overflow:hidden;}.mixins(@type) when(@type=winds){ font-size:0;}p{ .mixins(baidu);}
编译后:
p { overflow: hidden;}
(2)多条件,用逗号隔开:符合其中之一即可匹配
.mixins(@type) when(@type=baidu),(@type=winds){ overflow:hidden;}p{ .mixins(baidu);}h1{ .mixins(winds);}
编译后:
p { overflow: hidden;}h1 { overflow: hidden;}
(3)多条件,用and隔开:全部符合才匹配
.mixins(@type;@style) when(@type=baidu)and(@style=blue){ overflow:hidden;}p{ .mixins(baidu;blue);}h1{ .mixins(baidu;pink);}
编译后:
p { overflow: hidden;}
(四)递归
可以在定义的混合模块自我调用(递归)
循环输出的例子
.loop(@n;@i:1) when(@i<=@n){ .row-@{i}{ background:url('xxx.jpg') 0 @i*10px no-repeat; } .loop(@n;(@i+1));}.bg{ .loop(5);}
编译后:
.bg .row-1 { background: url('xxx.jpg') 0 10px no-repeat;}.bg .row-2 { background: url('xxx.jpg') 0 20px no-repeat;}.bg .row-3 { background: url('xxx.jpg') 0 30px no-repeat;}.bg .row-4 { background: url('xxx.jpg') 0 40px no-repeat;}.bg .row-5 { background: url('xxx.jpg') 0 50px no-repeat;}
(五)作用域
作用域跟其他编程语言类似,首先会从本地查找变量或者混合模块,如果没找到的话会去父级作用域中查找,逐层递增,直到找到为止,否则报错。
@color:#f60;p{ @color:#333; background-color:@color;}
编译后:
p { background-color: #333333;}
(六)命名空间
为了更好组织CSS或者单纯是为了更好的封装,可以添加命名空间
.index{ .mixins(){ font-size:0; }}p{ .index > .mixins();}
编译后:
p { font-size: 0;}
(七)注释
/*编译后保留css原有注释*/
//同时支持双反斜杠,但编译后不会保留在css文件中
(八)导入(import)
其实就是把样式内嵌到指定的文件中,不会带来额外请求
(1)嵌入less文件
@import "layout.less";
(2)嵌入css文件
@import (inline) "base.css";
(八)避免编译
如果需要输出一些不正确的CSS语法或者使用一些LESS不认识的专有语法,编译为less文件过程中会出现错误,这时候可以用避免编译来处理。
要输出这样的值我们可以在字符串前加上一个~
看下出错的例子:
p{ _top:exPRession(eval(document.documentElement.scrollTop));}
编译过程中报错
所以需要用到避免编译的语法
p{ _top:~"expression(eval(document.documentElement.scrollTop))";}
避免编译也支持字符串插入值
@opacity:50;p{ opacity:50/100; filter:~"alpha(opacity=@{opacity})";}
编译后:
p { opacity: 0.5; filter: alpha(opacity=50);}
总结:以上只是less知识中的冰山一角,更多请关注官网http://www.lesscss.net/article/home.html
下一章是 less代码跟踪调试 敬请期待
新闻热点
疑难解答