Copyright © 2000-2016 www.knowsky.com All rights reserved | 沪ICP备05001343号

王朝学院·作者佚名  2016-05-24
窄屏简体版  字體: 小  |  中  |  大  |  超大  

Less开发指南(二)- 基本语法(一)嵌套规则

【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代码跟踪调试 敬请期待

 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
© 2005- 王朝網路 版權所有 導航