【澳门葡京】发轫认识,作者要起来读书LESS啦

初叶认识 LESS

2012/09/24 · CSS ·
CSS

来源:申毅&邵华@IBM
DevelopWorks

LESS 背景介绍

LESS 提供了种种形式能平滑的将写好的代码转化成标准 CSS
代码,在众多流行的框架和工具盒中已经能平日来看 LESS 的人影了(例如
推文(Tweet) 提供的 bootstrap 库就利用了 LESS)。那么,LESS
是从何而来呢?它和 SASS 等体制表语言又有啥不相同吧?

图 1.LESS 的官网介绍
澳门葡京 1

依据维基百科上的牵线,其实 LESS 是 亚历克西斯 Sellier 受 SASS
的震慑制造的开源项目。当时 SASS 选取了缩进作为分隔符来区分代码块,而不是
CSS 中广为使用的括号。为了让 CSS 现有用户使用起来更为便利,Alexis 开发了
LESS 并提供了就如的成效。在一开头,LESS 的解释器也一致是由 Ruby
编写,后来才转而利用了 JavaScript. LESS
代码既可以运维在客户端,也可以运作在服务器端。在客户端只要把 LESS
代码和对应的 JavaScript 解释器在同一页面引用即可;而在劳动器端,LESS
可以运行在 Node.js 上,也得以运转在 Rhino 那样的 JavaScript 引擎上。

说一点题外话,其实将来的 SASS
已经有了两套语法规则:3个一如既往是用缩进作为分隔符来区分代码块的;另一套规则和
CSS 一样采取了大括弧作为风格符。后一种语法规则又名 SCSS,在 SASS 3
之后的版本都支持这种语法规则。SCSS 和 LESS
已经越来越像了,它俩之间更详实的对待可以参考 此链接。

LESS 高级性格

作者们了解 LESS
拥有四大特色:变量、混入、嵌套、函数。那么些特征在其他小说中早已拥有介绍,那里就不复述了。其实,LESS
还有着一些很有意思的天性有助于大家的开发,例如格局匹配、条件表明式、命名空间和效能域,以及
JavaScript 赋值等等。让我们来挨家挨户看看这一个特色吧。

方式匹配:

信任大家对 LESS 四大特点中的混入 (mixin)
照旧回想长远吧,您用它能够定义一堆属性,然后轻松的在多少个样式集中收录。甚至在概念混入时进入参数使得那些属性依据调用的参数不一致而转变不一样的属性。那么,让大家更进一步,来询问一下
LESS 对混入的更尖端协理:格局匹配和标准表达式。

先是,让我们来回想一下常备的带参数的混入方式:

清单 1. 带参数(及参数缺省值)的混入

CSS

.border-radius (@radius: 3px) { border-radius: @radius;
-moz-border-radius: @radius; -webkit-border-radius: @radius; } .button {
.border-radius(6px); } .button2 { .border-radius(); }

1
2
3
4
5
6
7
8
9
10
11
.border-radius (@radius: 3px) {
  border-radius: @radius;
  -moz-border-radius: @radius;
  -webkit-border-radius: @radius;
}
.button {
  .border-radius(6px);
}
.button2 {
  .border-radius();
}

清单 2. 混入生成的 CSS 代码

CSS

.button { border-radius: 6px; -moz-border-radius: 6px;
-webkit-border-radius: 6px; } .button2 { border-radius: 3px;
-moz-border-radius: 3px; -webkit-border-radius: 3px; }

1
2
3
4
5
6
7
8
9
10
.button {
  border-radius: 6px;
  -moz-border-radius: 6px;
  -webkit-border-radius: 6px;
}
.button2 {
  border-radius: 3px;
  -moz-border-radius: 3px;
  -webkit-border-radius: 3px;
}

从地点那一个例子可以看出,在混入大家能够定义参数,同时也足以为这一个参数指定二个缺省值。那样我们在调用这一个混入时倘若指定了参数 .border-radius(6px),LESS
就会用 6px来替换,若是不指定参数来调用 .border-radius(),LESS
就会用缺省的 3px来替换。以后,大家更近一步,不仅仅通过参数值来改变最终结出,而是通过传播不相同的参数个数来合营差距的混入。

清单 3. 使用差其余参数个数来同盟不一致的混入

CSS

.mixin (@a) { color: @a; width: 10px; } .mixin (@a, @b) { color:
fade(@a, @b); } .header{ .mixin(red); } .footer{ .mixin(blue, 50%); }

1
2
3
4
5
6
7
8
9
10
11
12
13
14
.mixin (@a) {
  color: @a;
  width: 10px;
}
.mixin (@a, @b) {
  color: fade(@a, @b);
}
 
.header{
    .mixin(red);
}
.footer{
    .mixin(blue, 50%);
}

清单 4. 两样参数个数调用后转移的 CSS 代码

CSS

.header { color: #ff0000; width: 10px; } .footer { color: rgba(0, 0,
255, 0.5); }

1
2
3
4
5
6
7
.header {
  color: #ff0000;
  width: 10px;
}
.footer {
  color: rgba(0, 0, 255, 0.5);
}

 

本条事例有个别像 Java 语言中的方法调用有个别近乎,LESS
可以根据调用参数的个数来选取正确的混入来带走。以往,我们明白到通过传播参数的值,以及传入差距的参数个数可以挑选差别的混入及变更它的最后代码。那三个例子的情势匹配都以卓殊简单明白的,让大家换个思路,上面的例证中参数都是由变量构成的,其实在
LESS
中定义参数是足以用常量的!形式匹配时卓绝的章程也会发生相应的更动,让大家看个实例。

清单 5. 用常量参数来决定混入的方式匹配

CSS

.mixin (dark, @color) { color: darken(@color, 10%); } .mixin (light,
@color) { color: lighten(@color, 10%); } .mixin (@zzz, @color) {
display: block; weight: @zzz; } .header{ .mixin(dark, red); } .footer{
.mixin(light, blue); } .body{ .mixin(none, blue); }

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
.mixin (dark, @color) {
  color: darken(@color, 10%);
}
.mixin (light, @color) {
  color: lighten(@color, 10%);
}
.mixin (@zzz, @color) {
  display: block;
  weight: @zzz;
}
 
.header{
    .mixin(dark, red);
}
.footer{
    .mixin(light, blue);
}
.body{
    .mixin(none, blue);
}

清单 6. 常量参数生成的 CSS 代码

CSS

.header { color: #cc0000; display: block; weight: dark; } .footer {
color: #3333ff; display: block; weight: light; } .body { display:
block; weight: none; }

1
2
3
4
5
6
7
8
9
10
11
12
13
14
.header {
  color: #cc0000;
  display: block;
  weight: dark;
}
.footer {
  color: #3333ff;
  display: block;
  weight: light;
}
.body {
  display: block;
  weight: none;
}

 

透过那几个例子大家得以看到,当大家定义的是变量参数时,因为 LESS
中对变量并从未项目标概念,所以它只会依据参数的个数来抉择相应的混入来替换。而定义常量参数就差距了,那时候不仅参数的个数要相应的上,而且常量参数的值和调用时的值也要平等才会合作的上。值得注意的是我们在
body 中的调用,它调用时指定的首先个参数 none
并不可以匹配上前多少个混入,而第两个混入 .mixin (@zzz, @color)就不相同了,由于它的七个参数都是变量,所以它承受任何值,因而它对多个调用都能匹配成功,由此我们在最后的
CSS 代码中看出每回调用的结果中都含有了第7、个混入的质量。

说到底,大家把清单 1
中的代码做略微改动,增加一个无参的混入和1个常量参数的混入,您猜猜看最后的万分结果会发生哪些变化么?

清单 7. 无参和常量参数的格局匹配

CSS

.border-radius (@radius: 3px) { border-radius: @radius;
-moz-border-radius: @radius; -webkit-border-radius: @radius; }
.border-radius (7px) { border-radius: 7px; -moz-border-radius: 7px; }
.border-radius () { border-radius: 4px; -moz-border-radius: 4px;
-webkit-border-radius: 4px; } .button { .border-radius(6px); } .button2
{ .border-radius(7px); } .button3{ .border-radius(); }

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
.border-radius (@radius: 3px) {
  border-radius: @radius;
  -moz-border-radius: @radius;
  -webkit-border-radius: @radius;
}
 
.border-radius (7px) {
  border-radius: 7px;
  -moz-border-radius: 7px;
}
.border-radius () {
  border-radius: 4px;
  -moz-border-radius: 4px;
  -webkit-border-radius: 4px;
}
 
.button {
  .border-radius(6px);
}
.button2 {
  .border-radius(7px);
}
.button3{
.border-radius();      
}

 

上面的结果恐怕会超越您的预想,无参的混入是力所能及包容任何调用,而常量参数相当严苛,必须有限支撑参数的值 (7px)和调用的值(7px)一样才会同盟。

清单 8. 加盟了无参混入后生成的 CSS 代码

CSS

.button { border-radius: 6px; -moz-border-radius: 6px;
-webkit-border-radius: 6px; border-radius: 4px; -moz-border-radius: 4px;
-webkit-border-radius: 4px; } .button2 { border-radius: 7px;
-moz-border-radius: 7px; -webkit-border-radius: 7px; border-radius: 7px;
-moz-border-radius: 7px; border-radius: 4px; -moz-border-radius: 4px;
-webkit-border-radius: 4px; } .button3 { border-radius: 3px;
-moz-border-radius: 3px; -webkit-border-radius: 3px; border-radius: 4px;
-moz-border-radius: 4px; -webkit-border-radius: 4px; }

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
.button {
  border-radius: 6px;
  -moz-border-radius: 6px;
  -webkit-border-radius: 6px;
  border-radius: 4px;
  -moz-border-radius: 4px;
  -webkit-border-radius: 4px;
}
.button2 {
  border-radius: 7px;
  -moz-border-radius: 7px;
  -webkit-border-radius: 7px;
  border-radius: 7px;
  -moz-border-radius: 7px;
  border-radius: 4px;
  -moz-border-radius: 4px;
  -webkit-border-radius: 4px;
}
.button3 {
  border-radius: 3px;
  -moz-border-radius: 3px;
  -webkit-border-radius: 3px;
  border-radius: 4px;
  -moz-border-radius: 4px;
  -webkit-border-radius: 4px;
}

 

基准表明式

有了情势匹配之后是利于了过多,大家能依照不一致的须求来同盟不同的混入,但更进一步的就是利用标准表明式来更是纯粹,尤其严俊的来限制混入的卓殊,完成的主意就是运用了 when这么些主要词。

清单 9. 接纳标准表明式来控制情势匹配

CSS

.mixin (@a) when (@a >= 10) { background-color: black; } .mixin (@a)
when (@a < 10) { background-color: white; } .class1 { .mixin(12) }
.class2 { .mixin(6) }

1
2
3
4
5
6
7
8
.mixin (@a) when (@a >= 10) {
  background-color: black;
}
.mixin (@a) when (@a < 10) {
  background-color: white;
}
.class1 { .mixin(12) }
.class2 { .mixin(6) }

清单 10. 标准表达式生成的 CSS 代码

CSS

.class1 { background-color: black; } .class2 { background-color: white;
}

1
2
3
4
5
6
.class1 {
  background-color: black;
}
.class2 {
  background-color: white;
}

 

运用 When 以及 <, >, =, <=, >= 是分外简短和方便的。LESS
并没有停留在此间,而且提供了广大档次检查函数来支援标准表明式,例如 iscolorisnumberisstringiskeywordisurl等等。

清单 11. 尺度表明式中帮助的类型检查函数

CSS

.mixin (@a) when (iscolor(@a)) { background-color: black; } .mixin (@a)
when (isnumber(@a)) { background-color: white; } .class1 { .mixin(red) }
.class2 { .mixin(6) }

1
2
3
4
5
6
7
8
.mixin (@a) when (iscolor(@a)) {
  background-color: black;
}
.mixin (@a) when (isnumber(@a)) {
  background-color: white;
}
.class1 { .mixin(red) }
.class2 { .mixin(6) }

清单 12. 品种检查匹配后转变的 CSS 代码

CSS

.class1 { background-color: black; } .class2 { background-color: white;
}

1
2
3
4
5
6
.class1 {
  background-color: black;
}
.class2 {
  background-color: white;
}

 

另外,LESS 的基准表明式同样支撑 AND 和 O福睿斯 以及 NOT
来组合条件表达式,那样可以社团成更为强劲的规范表明式。必要越发提出的有个别是,O大切诺基在 LESS 中并不是用 or 关键字,而是用 , 来表示 or 的逻辑关系。

清单 13. AND,ORubicon,NOT 条件表明式

CSS

.smaller (@a, @b) when (@a > @b) { background-color: black; } .math
(@a) when (@a > 10) and (@a < 20) { background-color: red; } .math
(@a) when (@a < 10),(@a > 20) { background-color: blue; } .math
(@a) when not (@a = 10) { background-color: yellow; } .math (@a) when
(@a = 10) { background-color: green; } .testSmall {.smaller(30, 10) }
.testMath1 {.math(15)} .testMath2 {.math(7)} .testMath3 {.math(10)}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
.smaller (@a, @b) when (@a > @b) {
    background-color: black;
}
.math (@a) when (@a > 10) and (@a < 20) {
    background-color: red;
}
.math (@a) when (@a < 10),(@a > 20) {
    background-color: blue;
}
.math (@a) when not (@a = 10)  {
    background-color: yellow;
}
.math (@a) when (@a = 10)  {
    background-color: green;
}
 
.testSmall {.smaller(30, 10) }
.testMath1 {.math(15)}
.testMath2 {.math(7)}
.testMath3 {.math(10)}

清单 14. AND,O福特Explorer,NOT 条件表明式生成的 CSS 代码

CSS

.testSmall { background-color: black; } .testMath1 { background-color:
red; background-color: yellow; } .testMath2 { background-color: blue;
background-color: yellow; } .testMath3 { background-color: green; }

1
2
3
4
5
6
7
8
9
10
11
12
13
14
.testSmall {
  background-color: black;
}
.testMath1 {
  background-color: red;
  background-color: yellow;
}
.testMath2 {
  background-color: blue;
  background-color: yellow;
}
.testMath3 {
  background-color: green;
}

 

命名空间和成效域

LESS 所带来的变量,混入那个特点其实很大程度上避免了古板 CSS
中的大批量代码重复。变量可以防止三个属性数拾贰回重复,混入可以幸免属性集的双重。而且动用起来尤其灵活,维护起来也利于了好多,只要修改一处定义而无需修改多处引用的地点。以后,让大家更进一步,当笔者定义好了变量和混入之后,怎么能更好的支配和应用它们啊,怎么幸免和其余地点定义的变量及混入争辩?1个明了的想法就是像其他语言同样引入命名空间和作用域了。首先我们来看一个LESS 的成效域的例证。

清单 15. 变量的功能域

CSS

@var: red; #page { @var: white; #header { color: @var; } } #footer {
color: @var; }

1
2
3
4
5
6
7
8
9
10
@var: red;
#page {
  @var: white;
  #header {
    color: @var;
  }
}
#footer {
  color: @var;
}

 

在那些例子里,可以见到 header
中的 @var会率先在现阶段作用域寻找,然后再逐层往父成效域中寻找,平昔到顶层的全局意义域中截至。所以
header 的 @var在父效率域中找到之后就截止了追寻,最后的值为 white。而
footer
中的 @var在当前效劳域没找到定义之后就摸索到了全局功效域,最终的结果就是大局功能域中的定义值
red。

清单 16. 变量成效域例子生成的 CSS 代码

CSS

#page #header { color: #ffffff; // white } #footer { color:
#ff0000; // red }

1
2
3
4
5
6
#page #header {
  color: #ffffff;  // white
}
#footer {
  color: #ff0000;  // red
}

 

打听了功效域之后让我们再来看一下命名空间,大家得以用命名空间把变量和混入封装起来,幸免和此外地点的定义争辨,引用起来也丰富便于,只要在面前加上相应的命名空间就可以了。

清单 17. 命名空间的例证

CSS

@var-color: white; #bundle { @var-color: black; .button () { display:
block; border: 1px solid black; background-color: @var-color; } .tab() {
color: red } .citation() { color: black} .oops {weight: 10px} } #header
{ color: @var-color; #bundle > .button; #bundle > .oops;

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
@var-color: white;
#bundle {
  @var-color: black;
 
  .button () {
    display: block;
    border: 1px solid black;
    background-color: @var-color;
  }
  .tab() { color: red }
  .citation() { color: black}
  .oops {weight: 10px}
}
 
#header {
    color: @var-color;
    #bundle > .button;
    #bundle > .oops;

 

这边可以观看,大家拔取嵌套规则在 #bundle中建立了一个命名空间,在里头封装的变量以及品质集合都不会暴光到表面空间中,例如 .tab(), .citation()都未曾揭破在终极的
CSS 代码中。而值得注意的有些是 .oops 却被揭示在了最终的 CSS
代码中,那种结果只怕并不是大家想要的。其实同样的例子我们得以在混入的例证中也足以发现,即无参的混入 .tab()是和常见的性质集 .oops今非昔比的。无参的混入是不会暴露在终极的
CSS
代码中,而平凡的性质集则会以往出来。我们在概念命名空间和混入时要小心处理那样的差异,幸免带来潜在的题目。

清单 18. 命名空间例子生成的 CSS 代码

CSS

#bundle .oops { weight: 10px; } #header { color: #ffffff; display:
block; border: 1px solid black; background-color: #000000; weight:
10px; }

1
2
3
4
5
6
7
8
9
10
#bundle .oops {
  weight: 10px;
}
#header {
  color: #ffffff;
  display: block;
  border: 1px solid black;
  background-color: #000000;
  weight: 10px;
}

 

JavaScript 赋值 (JavaScript Evaluation)

若是能在 CSS 中行使部分 JavaScript 方法确实是十分令人欢悦的,而 LESS
真正逐步投入那项功用,近期曾经能接纳字符串及数字的常用函数了,想要在
LESS 中应用 JavaScript
赋值只须求用反引号(`)来含有所要进行的操作即可。让我们看看实例吧。

清单 19. JavaScript 赋值的例证

CSS

.eval { js: `1 + 1`; js: `(1 + 1 == 2 ? true : false)`; js:
`”hello”.toUpperCase() + ‘!’`; title: `process.title`; } .scope {
@foo: 42; var: `this.foo.toJS()`; } .escape-interpol { @world:
“world”; width: ~`”hello” + ” ” + @{world}`; } .arrays { @ary: 1, 2,
3; @ary2: 1 2 3; ary: `@{ary}.join(‘, ‘)`; ary: `@{ary2}.join(‘,
‘)`; }

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
.eval {
    js: `1 + 1`;
    js: `(1 + 1 == 2 ? true : false)`;
    js: `"hello".toUpperCase() + ‘!’`;
    title: `process.title`;
}
.scope {
    @foo: 42;
    var: `this.foo.toJS()`;
}
.escape-interpol {
    @world: "world";
    width: ~`"hello" + " " + @{world}`;
}
.arrays {
    @ary:  1, 2, 3;
    @ary2: 1  2  3;
    ary: `@{ary}.join(‘, ‘)`;
    ary: `@{ary2}.join(‘, ‘)`;
}

 

作者们可以看来,在 eval 中大家得以用 JavaScript
做数字运算,布尔表达式;对字符串做大小写转化,串联字符串等操作。甚至最后可以取得到JavaScript 的运作环境(process.title)。同样可以看看 LESS
的功效域和变量也一如既往在 JavaScript 赋值中运用。而结尾的事例中,大家来看
JavaScript 赋值同样应用于数组操作当中。其实 LESS 的 JavaScript
赋值还有支撑其余一些措施,可是当下从未有过发布出来。

清单 20. JavaScript 赋值生成的 CSS 代码

CSS

.eval { js: 2; js: true; js: “HELLO!”; title:
“/Users/Admin/Downloads/LESS/Less.app/Contents/Resources/engines/bin/node”;
} .scope { var: 42; } .escape-interpol { width: hello world; } .arrays {
ary: “1, 2, 3”; ary: “1, 2, 3”; }

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
.eval {
  js: 2;
  js: true;
  js: "HELLO!";
  title: "/Users/Admin/Downloads/LESS/Less.app/Contents/Resources/engines/bin/node";
}
.scope {
  var: 42;
}
.escape-interpol {
  width: hello world;
}
.arrays {
  ary: "1, 2, 3";
  ary: "1, 2, 3";
}

LESS 开发的实用工具 – LESS.app

在 LESS 开发中,大家能够用 LESS 提供的 JavaScript 脚本来在运维时解析,将
LESS 文件实时翻译成对应的 CSS 语法。如上面那么些事例:

清单 21. helloworld.html

CSS

<link rel=”stylesheet/less” type=”text/css”
href=”helloworld.less”> <script src=”less.js”
type=”text/javascript”></script> <div>Hello
World!</div>

1
2
3
4
<link rel="stylesheet/less" type="text/css" href="helloworld.less">
<script src="less.js" type="text/javascript"></script>
 
<div>Hello World!</div>

 

从地点的演示可以看看,在 helloworld.less 引入之后大家还添加了3个JavaScript 文件,那个文件就是 LESS 的解释器,可以在 LESS
的官方网站上下载此文件。须要专注的是,要注意 LESS 文件和 LESS
解释器的引入顺序,确保全数的 LESS 文件都在 LESS 解释器在此以前。

见到那里只怕有人会说,实时分析的话方便倒是便宜,可以质量上不就有消耗了么?比起普通
CSS 来说多了一道解释的步调。或然还有的人对写好的 LESS
文件不太放心,希望能来看解析之后的 CSS
文件来检查下是或不是是自个儿希望的故事情节。那多少个问题实际上都是力所能及缓解的,LESS
提供了服务端的方案,使用 npm 安装 LESS 之后就可以将你拥有的 LESS
文件批量转化成 CSS 文件,然后您得到 CSS
文件就可以随意了,检查生成的始末是或不是有误,也可以平昔在 HTML
中援引,再也不用添加 LESS 的 JavaScript
文件来分析它了。关于这一部分的事无巨细安装音讯,可以直接参考 LESS
官网上的介绍,这里就不复述了。
只是,对于 Mac 用户来说还有贰个更利于的工具得以使用,它就是 less.app.
那是三个第壹方提供的工具,使用起来特别福利,我们可以在下图所示的界面上添加
LESS 文件所在的目录,此工具就会在右手列出目录中包含的享有 LESS
文件。最酷的是,从此您就毫无再想不开怀想着要把 LESS 文件编译成 CSS
文件了,那一个工具会在您每一遍修改完保存 LESS 文件时本身实施编译,自动生成
CSS 文件。那样,您就能够天天查看 LESS 代码的末梢效果,检核查象 CSS
是还是不是顺应您的急需了,实在是太便宜了!

图 2. 导入 LESS
文件夹的界面,左侧可添加存放在多少个例外途径的文书夹。

澳门葡京 2

图 3. 编译结果界面,在此可手动批量编译全部 LESS 文件。
澳门葡京 3

更值为表扬的是,LESS.app 照旧个免费软件,接受馈赠:)

 

总结

因而地点的简练介绍,希望大家探听到了 LESS 的紧要性作用,相信 LESS
会让前端攻城师的干活愈发轻松,特别灵活。越多的底细可以参照 LESS
官方网站。

赞 3 收藏
评论

澳门葡京 4

开头认识 LESS,笔者要从头攻读LESS啦!,小编要less

LESS 是3个盛行的体裁表语言,它提供了 CSS3
也尚未落成的各样效果,让您编写 CSS 特别便民,越发直观。LESS
已经被周边采取在各个框架中 ( 例如:BootStrap)。本文将介绍 LESS
爆发的背景、优势、衍生和变化与 CSS
之间的转载,及其典型的使用场景,并将其与其他样式表语言进行比较。相信前端开发工程师会喜欢
LESS,灵活运用 LESS 以进步费用功用。

 

注释

less 是按照CSS的一种 扩张技术
.less 通过解析器 (比如koala)转换文件格式为CSS
@+变量名+值
语法
变量
LESS
允许开发者自定义变量,变量可以在大局样式中动用,变量使得样式修改起来特别简约。
大家得以从底下的代码精晓变量的利用及职能:
清单 3 LESS 文件
@border-color : #b5bcc7;

LESS 背景介绍

LESS 提供了二种方法能平滑的将写好的代码转化成标准 CSS
代码,在无数盛行的框架和工具盒中已经能时不时看看 LESS 的身影了(例如
Twitter 提供的 bootstrap 库就动用了 LESS)。那么,LESS
是从何而来呢?它和 SASS 等体制表语言又有啥分化吗?

缓存式注释/*诠释内容*/ 
非缓存式注释//注释内容

.mythemes tableBorder{
border : 1px solid @border-color;
}
经过编译生成的 CSS 文件如下:
清单 4. CSS 文件
.mythemes tableBorder {
border: 1px solid #b5bcc7;
}
从地点的代码中我们可以看出,变量是
VALUE(值)级其他复用,可以将一如既往的值定义成变量统一保管起来。
该脾气适用于概念主旨,大家得以将背景颜色、字体颜色、边框属性等平常样式举行联合定义,这样差其他主旨只须求定义不相同的变量文件就足以了。当然该特性也一样适用于
CSS RESET(重置样式表),在 Web
开发中,大家一再必要遮掩浏览器暗许的体裁行为而要求重新定义样式表来覆盖浏览器的暗许行为,那里可以运用
LESS
的变量个性,那样就可以在不一致的体系间重用样式表,大家仅必要在不一致的品类样式表中,依据须求再也给变量赋值即可。
LESS
中的变量和其余编程语言一样,可以兑现值的复用,同样它也有生命周期,也等于Scope(变量范围,开发人士惯称之为功能域),简而言之就是有的变量照旧全局变量的定义,查找变量的相继是先在局地定义中找,若是找不到,则查找上级定义,直至全局。上面大家经过2个简练的事例来表达Scope。
清单 5. LESS 文件
@width : 20px;
#homeDiv {
@width : 30px;
#centerDiv{
width : @width;// 此处应该取如今概念的变量 width 的值 30px
}
}
#leftDiv {
width : @width; // 此处应该取最下面定义的变量 width 的值 20px

 

 

}
经过编译生成的 CSS 文件如下:
清单 6. CSS 文件
#homeDiv #centerDiv {
width: 30px;
}
#leftDiv {
width: 20px;
}
Mixins(混入)
Mixins(混入)作用对用开发者来说并不生疏,很多动态语言都支持Mixins(混入)天性,它是一种类继承的一种落成,在 LESS 中,混入是指在1个CLASS 中引入别的三个业已定义的 CLASS,就好像在当下 CLASS
中增添1特性质一样。
咱俩先简单看一下 Mixins 在 LESS 中的使用:
清单 7. LESS 文件
// 定义2个样式采纳器
.roundedCorners(@radius:5px) {
-moz-border-radius: @radius;
-webkit-border-radius: @radius;
border-radius: @radius;
}
// 在此外的体裁采取器中使用
#header {
.roundedCorners;
}
#footer {
.roundedCorners(10px);
}
由此编译生成的 CSS 文件如下:
【澳门葡京】发轫认识,作者要起来读书LESS啦。清单 8. CSS 文件
#header {
-moz-border-radius:5px;
-webkit-border-radius:5px;
border-radius:5px;
}
#footer {
-moz-border-radius:10px;
-webkit-border-radius:10px;
border-radius:10px;
}
从地点的代码大家得以看看:Mixins
其实是一种嵌套,它同意将多个类嵌入到其余贰个类中行使,被安置的类也得以称呼变量,简单来说,Mixins
其实是平整级其他复用。
Mixins 还有一种形式叫做 Parametric Mixins(混入参数),LESS
也接济这一风味:
清单 9. LESS 文件
// 定义2个体裁采纳器
.borderRadius(@radius){
-moz-border-radius: @radius;
-webkit-border-radius: @radius;
border-radius: @radius;
}
// 使用已定义的体裁选拔器
#header {
.borderRadius(10px); // 把 10px 用作参数传递给样式采取器
}
.btn {
.borderRadius(3px);// // 把 3px 作为参数传递给样式选取器

图 1.LESS 的官网介绍

澳门葡京 5

根 据维基百科上的牵线,其实 LESS 是 亚历克西斯 Sellier 受 SASS
的震慑创制的开源项目。当时 SASS 拔取了缩进作为分隔符来区分代码块,而不是
CSS 中广为使用的括号。为了让 CSS 现有用户接纳起来尤其有利,亚历克西斯 开发了
LESS 并提供了就像是的效能。在一早先,LESS 的解释器也一致是由 Ruby
编写,后来才转而利用了 JavaScript. LESS
代码既可以运营在客户端,也可以运作在劳动器端。在客户端只要把 LESS
代码和对应的 JavaScript 解释器在同一页面引用即可;而在劳动器端,LESS
可以运作在 Node.js 上,也足以运营在 Rhino 那样的 JavaScript 引擎上。

 

说一点题外话,其实将来的 SASS
已经有了两套语法规则:一个依旧是用缩进作为分隔符来区分代码块的;另一套规则和
CSS 一样使用了大括弧作为风格符。后一种语法规则又名 SCSS,在 SASS 3
之后的版本都协理这种语法规则。SCSS 和 LESS
已经特别像了,它俩之间更详细的比较可以参考 此链接。

变量

}
因此编译生成的 CSS 文件如下:
清单 10. CSS 文件
#header {
-moz-border-radius: 10px;
-webkit-border-radius: 10px;
border-radius: 10px;
}
.btn {
-moz-border-radius: 3px;
-webkit-border-radius: 3px;
border-radius: 3px;
}
大家还足以给 Mixins 的参数定义一位暗中同意值,如
清单 11. LESS 文件
.borderRadius(@radius:5px){
-moz-border-radius: @radius;
-webkit-border-radius: @radius;
border-radius: @radius;
}
.btn {
.borderRadius;
}
透过编译生成的 CSS 文件如下:
清单 12. CSS 文件
.btn {
-moz-border-radius: 5px;
-webkit-border-radius: 5px;
border-radius: 5px;
}
像 JavaScript 中 arguments一样,Mixins
也有那样一个变量:@arguments。@arguments 在 Mixins
中具是三个很特其余参数,当 Mixins
引用那么些参数时,该参数表示全体的变量,很多气象下,这么些参数可以省去你多多代码。
清单 13. LESS 文件
.boxShadow(@x:0,@y:0,@blur:1px,@color:#000){
-moz-box-shadow: @arguments;
-webkit-box-shadow: @arguments;
box-shadow: @arguments;
}
#header {
.boxShadow(2px,2px,3px,#f36);
}
透过编译生成的 CSS 文件如下:
清单 14. CSS 文件
#header {
-moz-box-shadow: 2px 2px 3px #FF36;
-webkit-box-shadow: 2px 2px 3px #FF36;
box-shadow: 2px 2px 3px #FF36;
}
Mixins 是 LESS
中很重点的表征之1、那里也写了成百上千事例,看到那一个事例你是不是会有这么的疑问:当我们具有了大量接纳器的时候,尤其是社团一同开发时,怎么着有限支撑采用器之间重名难点?假诺您是
java 程序员或 C++ 程序员,作者猜你早晚会想到命名空间 Namespaces,LESS
也使用了命名空间的形式来防止重名难题,于是乎 LESS 在 mixins
的底蕴上增加了弹指间,看上边那样一段代码:
清单 15. LESS 文件
#mynamespace {
.home {…}
.user {…}
}
如此我们就定义了二个名为 mynamespace 的命名空间,假若大家要复用 user
那一个采纳器的时候,大家只须要在需求混入这么些采纳器的地方如此使用就足以了。#mynamespace
> .user。
嵌套的条条框框
在大家书写标准 CSS
的时候,碰着多层的因素嵌套那种境况时,大家依然采用从外到内的拔取器嵌套定义,要么选拔给一定成分加
CLASS 或 ID 的措施。在 LESS 中我们得以那样写:
清单 16. HTML 片段
<div id=”home”>
<div id=”top”>top</div>
<div id=”center”>
<div id=”left”>left</div>
<div id=”right”>right</div>
</div>
</div>
清单 17. LESS 文件
#home{
color : blue;
width : 600px;
height : 500px;
border:outset;
#top{
border:outset;
width : 90%;
}
#center{
border:outset;
height : 300px;
width : 90%;
#left{
border:outset;
float : left;
width : 40%;
}
#right{
border:outset;
float : left;
width : 40%;
}
}
}
由此编译生成的 CSS 文件如下:
清单 18. CSS 文件
#home {
color: blue;
width: 600px;
height: 500px;
border: outset;
}
#home #top {
border: outset;
width: 90%;
}
#home #center {
border: outset;
height: 300px;
width: 90%;
}
#home #center #left {
border: outset;
float: left;
width: 40%;
}
#home #center #right {
border: outset;
float: left;
width: 40%;
}
从上边的代码中大家可以看来,LESS 的嵌套规则的写法是 HTML 中的 DOM
结构相对应的,那样使大家的体裁表书写尤其简明和更好的可读性。同时,嵌套规则使得对伪成分的操作更为有利。
清单 19. LESS 文件
a {
color: red;
text-decoration: none;
&:hover {// 有 & 时解析的是同3个因素或此因素的伪类,没有 &
解析是后人元素
color: black;
text-decoration: underline;
}
}
因而编译生成的 CSS 文件如下:
清单 20. CSS 文件
a {
color: red;
text-decoration: none;
}
a:hover {
color: black;
text-decoration: underline;
}
运算及函数
在我们的 CSS 中充满着多量的数值型的 value,比如 color、padding、margin
等,那个数值之间在好几意况下是兼具一定关系的,那么大家怎么着使用 LESS
来社团大家那些数值之间的关联呢?大家来看那段代码:
清单 21 . LESS 文件
@init: #111111;
@transition: @init*2;
.switchColor {
color: @transition;
}
通过编译生成的 CSS 文件如下:
清单 22. CSS 文件
.switchColor {
color: #222222;
}
上边的例证中应用 LESS 的 operation 是 天性,其实简单来说,就是对数值型的
value(数字、颜色、变量等)举办加减乘除四则运算。同时 LESS
还有一个专程针对 color 的操作提供一组函数。上面是 LESS
提供的对准颜色操作的函数列表:
lighten(@color, 10%); // return a color which is 10% *lighter* than
@color
darken(@color, 10%); // return a color which is 10% *darker* than
@color
saturate(@color, 10%); // return a color 10% *more* saturated than
@color
desaturate(@color, 10%);// return a color 10% *less* saturated than
@color
fadein(@color, 10%); // return a color 10% *less* transparent than
@color
fadeout(@color, 10%); // return a color 10% *more* transparent than
@color
spin(@color, 10); // return a color with a 10 degree larger in hue than
@color
spin(@color, -10); // return a color with a 10 degree smaller hue than
@color
PS: 上述代码引自 LESS CSS 官方网站,详情请见

利用这个函数和 JavaScript 中接纳函数一样。
清单 23 LESS 文件
init: #f04615;
#body {
background-color: fadein(@init, 10%);
}
经过编译生成的 CSS 文件如下:
清单 24. CSS 文件
#body {
background-color: #f04615;
}
从上边的例证大家可以发现,那组函数像极了 JavaScript
中的函数,它可以被调用和传递参数。这一个函数的机要职能是提供颜色变换的意义,先把颜色转换到HSL 色,然后在此基础上展开操作,LESS
还提供了获取颜色值的方法,在此处就不举例表明了。
LESS
提供的演算及函数特性适用于贯彻页面组件天性,比如组件切换时的渐入渐出。
Comments(注释)
适于的诠释是确保代码可读性的需求手段,LESS
对注释也提供了支撑,主要有三种格局:单行注释和多行注释,那与 JavaScript
中的注释方法同样,我们那边不做详细的辨证,只强调一点:LESS 中单行注释
(// 单行注释 ) 是不大概显得在编译后的 CSS
中,所以只要您的注释是对准样式表达的请使用多行注释。
LESS VS SASS
同类框架还有 SASS 与 LESS 比较,两者都属于 CSS
预处理器,成效上日照小异,都以利用类似程序式语言的点子书写 CSS,
都抱有变量、混入、嵌套、继承等特征,最终目标都是便民 CSS
的书写及保安。
LESS 和 SASS 互相促进互相影响,比较之下 LESS 更类似 CSS 语法

 

@nice-blue: #5B83AD;

LESS 高级天性

自个儿 们知道 LESS
拥有四大特点:变量、混入、嵌套、函数。这个特色在任何小说中一度怀有介绍,这里就不复述了。其实,LESS
还有所一些很风趣的性状有助于大家的支出,例如方式匹配、条件表明式、命名空间和功能域,以及
JavaScript 赋值等等。让我们来挨家挨户看看这几个特征吧。

@light-blue: @nice-blue + #111;

 

#header { color: @light-blue; }

方式匹配:

深信大家对 LESS 四大特色中的混入 (mixin)
照旧回想长远吧,您用它亦可定义一堆属性,然后轻松的在八个样式集中收录。甚至在概念混入时参预参数使得那么些属性依据调用的参数不一致而变化区其他习性。那
么,让大家更进一步,来打探一下 LESS
对混入的更高级协理:方式匹配和规范表达式。

第贰让大家来回想一下惯常的带参数的混入情势:

 

 

混合

清单 1. 带参数(及参数缺省值)的混入

 

Html代码  澳门葡京 6

  1. .border-radius (@radius: 3px) {   
  2.  border-radius: @radius;   
  3.  -moz-border-radius: @radius;   
  4.  -webkit-border-radius: @radius;   
  5. }   
  6. .button {   
  7.  .border-radius(6px);   
  8. }   
  9. .button2 {   
  10.  .border-radius();   
  11. }  

 

1.混合类:

.bordered {

border-top: dotted 1px black;

border-bottom: solid 2px black;

}

#menu a {

color: #111;

.bordered;

 
2.混合带参数:

.border-radius (@radius) {

border-radius: @radius;

-moz-border-radius: @radius;

-webkit-border-radius: @radius;

}}

 

#header {

.border-radius(4px);

}

大家还足以像那样给参数设置暗中认同值:

.border-radius (@radius: 5px) {

border-radius: @radius;

-moz-border-radius: @radius;

-webkit-border-radius: @radius;

}

#header {

.border-radius;

}

 

形式匹配

LESS 提供了经过参数值控制 mixin 行为的效用,让大家先从最简便易行的例证开首:

.mixin (@s, @color) { … }

.class {

.mixin(@switch, #888);

}

设若要依照 @switch 的值控制 .mixin 行为,只需根据下边的办法定义 .mixin:

 

.mixin (dark, @color) {

color: darken(@color, 10%);

}

.mixin (light, @color) {

color: lighten(@color, 10%);

}

.mixin (@_, @color) {

display: block;

}

接下来调用:

@switch: light;

 

.class {

.mixin(@switch, #888);

}

将会拿到以下 CSS:

 

.class {

color: #a2a2a2;

display: block;

}

传给 .mixin 的水彩将实施 lighten 函数,若是 @switch 的值是
dark,那么则会履行 darken 函数输出颜色。

 

运算:

@test:800px;

body{

width:@test – 200; //运算会自动同步单位

}

 

嵌套规则

LESS 能够让大家以嵌套的主意编写层叠样式

#header {

color: black;

 

.navigation {

font-size: 12px;

}

.logo {

width: 300px;

&:hover { text-decoration: none }

}

}

专注 & 符号的拔取 — 倘若您想写串联采用器,而不是写后代拔取器,就可以用到
& 了。这一点对伪类尤其有用如 :hover 和 :focus。

例如:

.bordered {

&.float {

float: left;

}

.top {

margin: 5px;

}

}

会输出:

 

.bordered.float {

float: left;

}

.bordered .top {

margin: 5px;

}

 

@arguments 变量

.box-shadow (@x: 0, @y: 0, @blur: 1px, @color: #000) {

box-shadow: @arguments;

-moz-box-shadow: @arguments;

-webkit-box-shadow: @arguments;

}

.box-shadow(2px, 5px);

将会输出:

box-shadow: 2px 5px 1px #000;

-moz-box-shadow: 2px 5px 1px #000;

-webkit-box-shadow: 2px 5px 1px #000;

 

避免编译

~"``样式" 可用单引号或双引号

有时候大家要求输出一些不科学的 CSS 语法恐怕使用一些 LESS
不认得的专有语法。

 

要出口那样的值我们能够在字符串前增进七个 ~,例如:

.class {

filter: ~”ms:alwaysHasItsOwnSyntax.For.Stuff()”;

}

那叫作“幸免编译”,输出结果为:

 

.class {

filter: ms:alwaysHasItsOwnSyntax.For.Stuff();

}

 

作用域

LESS
中的功用域跟任何编程语言万分相近,首先会从本地查找变量或者夹杂模块,若是没找到的话会去父级作用域中查找,直到找到为止。

@var: red;

#page {

@var: white;

#header {

color: @var; // white

}

}

#footer {

color: @var; // red

}

 

!important关键字

 

调用时在混合前面加上!important关键字表示将交织带来的兼具属性标记为!important:

 

.mixin (@a: 0) {

border: @a;

boxer: @a;

}

.unimportant {

.mixin(1);

}

.important {

.mixin(2) !important;

}

编译成:

 

.unimportant {

border: 1;

boxer: 1;

}

.important {

border: 2 !important;

boxer: 2 !important;

}

清单 2. 混入生成的 CSS 代码

 

Html代码  澳门葡京 7

  1. .button {   
  2.  border-radius: 6px;   
  3.  -moz-border-radius: 6px;   
  4.  -webkit-border-radius: 6px;   
  5. }   
  6. .button2 {   
  7.  border-radius: 3px;   
  8.  -moz-border-radius: 3px;   
  9.  -webkit-border-radius: 3px;   
  10. }  

 

 

从地点那么些事例可以看出,在混入大家得以定义参数,同时也足以为那几个参数指定2个缺省值。那样大家在调用那几个混入时只要指定了参数 .border-radius(6px),LESS
就会用 6px来替换,倘诺不点名参数来调用.border-radius(),LESS
就会用缺省的 3px来替换。以往,大家更近一步,不仅仅通过参数值来改变最后结果,而是通过传播分裂的参数个数来同盟区其余混入。

 
清单 3. 采用分歧的参数个数来同盟区其他混入

 

Html代码  澳门葡京 8

  1. .mixin (@a) {   
  2.  color: @a;   
  3.  width: 10px;   
  4. }   
  5. .mixin (@a, @b) {   
  6.  color: fade(@a, @b);   
  7. }   
  8.   
  9. .header{   
  10.    .mixin(red);   
  11. }   
  12. .footer{   
  13. 澳门葡京,   .mixin(blue, 50%);   
  14. }  

 

 
清单 4. 例外参数个数调用后变更的 CSS 代码

 

Html代码  澳门葡京 9

  1. .header {   
  2.  color: #ff0000;   
  3.  width: 10px;   
  4. }   
  5. .footer {   
  6.  color: rgba(0, 0, 255, 0.5);   
  7. }  

 

 

其一例子有个别像 Java 语言中的方法调用有个别类似,LESS
能够依照调用参数的个数来摘取正确的混入来带走。以往,我们询问到通过传播参数的值,以及传入不相同的参数个数可以选拔不相同的混入及变更它的终极代码。那五个例证的方式匹配都以极度简单掌握的,让大家换个思路,上边的事例中参数都以由变量构成的,其实在
LESS
中定义参数是可以用常量的!方式匹配时相当的不二法门也会生出相应的转变,让大家看个实例。

 
清单 5. 用常量参数来控制混入的方式匹配

 

Html代码  澳门葡京 10

  1. .mixin (dark, @color) {   
  2.  color: darken(@color, 10%);   
  3. }   
  4. .mixin (light, @color) {   
  5.  color: lighten(@color, 10%);   
  6. }   
  7. .mixin (@zzz, @color) {   
  8.  display: block;   
  9.  weight: @zzz;   
  10. }   
  11.   
  12. .header{   
  13.    .mixin(dark, red);   
  14. }   
  15. .footer{   
  16.    .mixin(light, blue);   
  17. }   
  18. .body{   
  19.    .mixin(none, blue);   
  20. }  

 

 
清单 6. 常量参数生成的 CSS 代码

 

Html代码  澳门葡京 11

  1. .header {   
  2.  color: #cc0000;   
  3.  display: block;   
  4.  weight: dark;   
  5. }   
  6. .footer {   
  7.  color: #3333ff;   
  8.  display: block;   
  9.  weight: light;   
  10. }   
  11. .body {   
  12.  display: block;   
  13.  weight: none;   
  14. }  

 

 

通过那几个事例咱们可以见到,当大家定义的是变量参数时,因为 LESS
中对变量并没有项目标定义,所以它只会根据参数的个数来摘取相应的混入来替换。而定义常量参数就差距了,那时候不仅参数的个数要对应的上,而且常量参数的
值和调用时的值也要一如既往才会同盟的上。值得注意的是我们在 body
中的调用,它调用时指定的首先个参数 none
并不可以匹配上前七个混入,而第多少个混入 .mixin (@zzz, @color)就不同了,由于它的多个参数都以变量,所以它接受其余值,由此它对八个调用都能同盟成功,因而大家在最后的
CSS 代码中看到每趟调用的结果中都涵盖了第多个混入的性质。

 

最终,大家把清单 1
中的代码做略微改动,增添3个无参的混入和1个常量参数的混入,您猜猜看最终的至极结果会发出哪些变化么?

 
清单 7. 无参和常量参数的情势匹配

 

Html代码  澳门葡京 12

  1. .border-radius (@radius: 3px) {   
  2.  border-radius: @radius;   
  3.  -moz-border-radius: @radius;   
  4.  -webkit-border-radius: @radius;   
  5. }   
  6.   
  7. .border-radius (7px) {   
  8.  border-radius: 7px;   
  9.  -moz-border-radius: 7px;   
  10. }   
  11. .border-radius () {   
  12.  border-radius: 4px;   
  13.  -moz-border-radius: 4px;   
  14.  -webkit-border-radius: 4px;   
  15. }   
  16.   
  17. .button {   
  18.  .border-radius(6px);   
  19. }   
  20. .button2 {   
  21.  .border-radius(7px);   
  22. }   
  23. .button3{   
  24. .border-radius();        
  25. }  

 

 

上面的结果可能会超越您的预期,无参的混入是力所能及包容任何调用,而常量参数分外严厉,必须保险参数的值(7px)和调用的值 (7px)一致才会合营。

 
清单 8. 加入了无参混入后生成的 CSS 代码

 

Html代码  澳门葡京 13

  1. .button {   
  2.  border-radius: 6px;   
  3.  -moz-border-radius: 6px;   
  4.  -webkit-border-radius: 6px;   
  5.  border-radius: 4px;   
  6.  -moz-border-radius: 4px;   
  7.  -webkit-border-radius: 4px;   
  8. }   
  9. .button2 {   
  10.  border-radius: 7px;   
  11.  -moz-border-radius: 7px;   
  12.  -webkit-border-radius: 7px;   
  13.  border-radius: 7px;   
  14.  -moz-border-radius: 7px;   
  15.  border-radius: 4px;   
  16.  -moz-border-radius: 4px;   
  17.  -webkit-border-radius: 4px;   
  18. }   
  19. .button3 {   
  20.  border-radius: 3px;   
  21.  -moz-border-radius: 3px;   
  22.  -webkit-border-radius: 3px;   
  23.  border-radius: 4px;   
  24.  -moz-border-radius: 4px;   
  25.  -webkit-border-radius: 4px;   
  26. }  

 

 

基准表明式

有了形式匹配之后是利于了很多,大家能依照不同的须要来同盟不一样的混入,但更进一步的就是使用标准表明式来更为可靠,尤其严谨的来界定混入的杰出,达成的章程就是利用了 when这一个相当紧要词。

 
清单 9. 施用标准表达式来控制格局匹配

 

Html代码  澳门葡京 14

  1. .mixin (@a) when (@a >= 10) {   
  2.  black;   
  3. }   
  4. .mixin (@a) when (@a < 10) {   
  5.  white;   
  6. }   
  7. .class1 { .mixin(12) }   
  8. .class2 { .mixin(6) }  

 

 
清单 10. 标准表明式生成的 CSS 代码

 

Html代码  澳门葡京 15

  1. .class1 {   
  2.  black;   
  3. }   
  4. .class2 {   
  5.  white;   
  6. }  

 

 

运用 When 以及 <, >, =, <=, >= 是那些大约和惠及的。LESS
并没有停留在此间,而且提供了成百上千档次检查函数来资助标准表达式,例如 iscolorisnumberisstringiskeywordisurl等等。

 
清单 11. 口径表明式中协理的档次检查函数

 

Html代码  澳门葡京 16

  1. .mixin (@a) when (iscolor(@a)) {   
  2.  black;   
  3. }   
  4. .mixin (@a) when (isnumber(@a)) {   
  5.  white;   
  6. }   
  7. .class1 { .mixin(red) }   
  8. .class2 { .mixin(6) }  

 

 
清单 12. 项目检查匹配后变化的 CSS 代码

 

Html代码  澳门葡京 17

  1. .class1 {   
  2.  black;   
  3. }   
  4. .class2 {   
  5.  white;   
  6. }  

 

 

除此以外,LESS 的标准化表明式同样支持 AND 和 O中华V 以及 NOT
来组成条件表达式,那样能够组织成更为强劲的口径表明式。须要专门提出的少数是,O本田CR-V在 LESS 中并不是用 or 关键字,而是用 , 来表示 or 的逻辑关系。

 
清单 13. AND,O途乐,NOT 条件表明式

 

Html代码  澳门葡京 18

  1. .smaller (@a, @b) when (@a > @b) {   
  2.    black;   
  3. }   
  4. .math (@a) when (@a > 10) and (@a < 20) {   
  5.    red;   
  6. }   
  7. .math (@a) when (@a < 10),(@a > 20) {   
  8.    blue;   
  9. }   
  10. .math (@a) when not (@a = 10)  {   
  11.    yellow;   
  12. }   
  13. .math (@a) when (@a = 10)  {   
  14.    green;   
  15. }   
  16.   
  17. .testSmall {.smaller(30, 10) }   
  18. .testMath1 {.math(15)}   
  19. .testMath2 {.math(7)}   
  20. .testMath3 {.math(10)}  

 

 
清单 14. AND,O牧马人,NOT 条件表达式生成的 CSS 代码

 

Html代码  澳门葡京 19

  1. .testSmall {   
  2.  black;   
  3. }   
  4. .testMath1 {   
  5.  red;   
  6.  yellow;   
  7. }   
  8. .testMath2 {   
  9.  blue;   
  10.  yellow;   
  11. }   
  12. .testMath3 {   
  13.  green;   
  14. }  

 

 

取名空间和功效域

LESS 所拉动的变量,混入那些特点其实很大程度上幸免了价值观 CSS
中的大批量代码重复。变量可以防止二个属性多次重复,混入可以避免属性集的再次。而且拔取起来特别灵活,维护起来也惠及了恒河沙数,只要修改一处定义而无需修改
多处引用的地点。以后,让我们更进一步,当作者定义好了变量和混入之后,怎么能更好的决定和运用它们啊,怎么避免和其余地点定义的变量及混入顶牛?二个可想而知的想法就是像任何语言一样引入命名空间和效率域了。首先大家来看1个LESS 的功能域的事例。

 
清单 15. 变量的效率域

 

Html代码  澳门葡京 20

  1. @var: red;   
  2. #page {   
  3.  @var: white;   
  4.  #header {   
  5.    color: @var;   
  6.  }   
  7. }   
  8. #footer {   
  9.  color: @var;   
  10. }  

 

 

在这些事例里,可以观看 header
中的 @var会率先在当前效能域寻找,然后再逐层往父作用域中寻找,一贯到顶层的大局意义域中甘休。所以
header 的 @var在父成效域中找到之后就截止了追寻,最后的值为 white。而
footer
中的 @var在当前作用域没找到定义之后就摸索到了大局成效域,最终的结果就是全局成效域中的定义值
red。

 
清单 16. 变量效用域例子生成的 CSS 代码

 

Html代码  澳门葡京 21

  1. #page #header {   
  2.  color: #ffffff;  // white   
  3. }   
  4. #footer {   
  5.  color: #ff0000;  // red   
  6. }  

 

 

刺探了功用域之后让大家再来看一下命名空间,大家得以用命名空间把变量和混入封装起来,防止和其余地点的概念顶牛,引用起来也不行便利,只要在头里加上相应的命名空间就可以了。

 
清单 17. 命名空间的事例

Html代码  澳门葡京 22

  1.  @var-color: white;   
  2.  #bundle {   
  3.   @var-color: black;   
  4.   
  5.   .button () {   
  6.     display: block;   
  7.     border: 1px solid black;   
  8.     @var-color;   
  9.   }   
  10.   .tab() { color: red }   
  11.   .citation() { color: black}   
  12.   .oops {weight: 10px}   
  13.  }   
  14.   
  15.  #header {   
  16.     color: @var-color;   
  17.     #bundle > .button;   
  18.     #bundle > .oops;  
  19. }  

 

此地可以看到,大家利用嵌套规则在 #bundle中创立了贰个命名空间,在内部封装的变量以及质量集合都不会暴光到表面空间中,例如 .tab(), .citation()都尚未暴露在最终的
CSS 代码中。而值得注意的一点是 .oops 却被揭示在了最后的 CSS
代码中,那种结果大概并不是咱们想要的。其实同样的事例大家可以在混入的例子中也得以窥见,即无参的混入 .tab()是和常见的习性集 .oops今非昔比的。无参的混入是不会揭示在结尾的
CSS
代码中,而普通的性质集则会以往出去。我们在概念命名空间和混入时要小心处理那样的反差,幸免带来潜在的题材。

 
清单 18. 命名空间例子生成的 CSS 代码

Html代码  澳门葡京 23

  1. #bundle .oops {   
  2.  weight: 10px;   
  3. }   
  4. #header {   
  5.  color: #ffffff;   
  6.  display: block;   
  7.  border: 1px solid black;   
  8.  #000000;   
  9.  weight: 10px;   
  10. }  

 

JavaScript 赋值 (JavaScript Evaluation)

如 果能在 CSS 中行使部分 JavaScript 方法确实是卓殊令人开心的,而 LESS
真正逐步投入那项功用,近来曾经能利用字符串及数字的常用函数了,想要在
LESS 中应用 JavaScript
赋值只须求用反引号(`)来含有所要进行的操作即可。让我们看看实例吧。

 
清单 19. JavaScript 赋值的例子

Html代码  澳门葡京 24

  1. .eval {   
  2.     js: `1 + 1`;   
  3.     js: `(1 + 1 == 2 ? true : false)`;   
  4.     js: `”hello”.toUpperCase() + ‘!’`;   
  5.     title: `process.title`;   
  6.  }   
  7.  .scope {   
  8.     @foo: 42;   
  9.     var: `this.foo.toJS()`;   
  10.  }   
  11.  .escape-interpol {   
  12.     @world: “world”;   
  13.     width: ~`”hello” + ” ” + @{world}`;   
  14.  }   
  15.  .arrays {   
  16.     @ary:  1, 2, 3;   
  17.     @ary2: 1  2  3;   
  18.     ary: `@{ary}.join(‘, ‘)`;   
  19.     ary: `@{ary2}.join(‘, ‘)`;   
  20.  }  

 

笔者们得以见见,在 eval 中大家得以用 JavaScript
做数字运算,布尔表达式;对字符串做大小写转化,串联字符串等操作。甚至末了可以获拿到JavaScript 的运作环境(process.title)。同样可以观望 LESS
的成效域和变量也同样在 JavaScript 赋值中运用。而最终的例证中,我们看出
JavaScript 赋值同样选拔于数组操作当中。其实 LESS 的 JavaScript
赋值还有支撑其余部分艺术,但是当下从未有过揭橥出来。

 
清单 20. JavaScript 赋值生成的 CSS 代码

Html代码  澳门葡京 25

  1. .eval {   
  2.  js: 2;   
  3.  js: true;   
  4.  js: “HELLO!”;   
  5.  title: “/Users/Admin/Downloads/LESS/Less.app/Contents/Resources/engines/bin/node”;   
  6. }   
  7. .scope {   
  8.  var: 42;   
  9. }   
  10. .escape-interpol {   
  11.  width: hello world;   
  12. }   
  13. .arrays {   
  14.  ary: “1, 2, 3”;   
  15.  ary: “1, 2, 3”;   
  16. }  

 

LESS 开发的实用工具 – LESS.app

在 LESS 开发中,大家得以用 LESS 提供的 JavaScript 脚本来在运营时分析,将
LESS 文件实时翻译成对应的 CSS 语法。如上面那么些例子:

 
清单 21. helloworld.html

Html代码  澳门葡京 26

  1. <link rel=”stylesheet/less” type=”text/css” href=”helloworld.less”>   
  2. <script src=”less.js” type=”text/javascript”></script>   
  3.   
  4. <div class=”helloworld”>Hello World!</div>  

 

从上 面的以身作则可以看看,在 helloworld.less 引入之后大家还添加了一个JavaScript 文件,那些文件就是 LESS 的解释器,可以在 LESS
的官方网站上下载此文件。须要留意的是,要留心 LESS 文件和 LESS
解释器的引入顺序,确保全数的 LESS 文件都在 LESS 解释器从前。

 

看样子这里或许有人会说,实时分析的话方便倒是便宜,可以质量上不就有消耗了么?比起家常
CSS 来说多了一道解释的手续。大概还有的人对写好的 LESS
文件不太放心,希望能见到解析之后的 CSS
文件来检查下是或不是是自身盼望的故事情节。那五个难点实际上都是力所能及缓解的,LESS
提供了服务端的方案,使用 npm 安装 LESS 之后就可以将你拥有的 LESS
文件批量转化成 CSS 文件,然后您得到 CSS
文件就可以无限制了,检查生成的内容是或不是有误,也可以平昔在 HTML
中引用,再也不用添加 LESS 的 JavaScript
文件来分析它了。关于这有个别的详尽安装音信,可以直接参考 LESS
官网上的介绍,那里就不复述了。

 

只是,对于 Mac 用户来说还有3个更有益于的工具得以动用,它就是 less.app.
那是多个第壹方提供的工具,使用起来分外便于,我们可以在下图所示的界面上添加
LESS 文件所在的目录,此工具就会在右手列出目录中含有的装有 LESS
文件。最酷的是,从此您就不用再担心思念着要把 LESS 文件编译成 CSS
文件了,那一个工具会在您每趟修改完保存 LESS 文件时协调实施编译,自动生成
CSS 文件。那样,您就足以每二十二日查看 LESS 代码的末段效果,检核对象 CSS
是还是不是顺应您的急需了,实在是太便宜了!

 
图 2. 导入 LESS 文件夹的界面,左边可添加存放在多少个不等途径的公文夹。

澳门葡京 27

 
图 3. 编译结果界面,在此可手动批量编译全数 LESS 文件。

澳门葡京 28

更值为表彰的是,LESS.app 依旧个免费软件,接受捐赠:)

 

总结

通过地方的总结介绍,希望大家明白到了 LESS 的根本职能,相信 LESS
会让前端攻城师的干活进一步自在,特别灵敏。越来越多的细节可以参见 LESS
官方网站。

 

参考资料

学习

  • “LESS CSS 框架简介”(developerWorks,二零一三 年 7 月):LESS
    是动态的体裁表语言,通过简洁明了的语法定义,使编写 CSS
    的行事变得非凡简单。本文将通过实例,为大家介绍这一框架。
  • LESS 官方网站: 包罗官方参考文档库,示例代码等有关质感。
  • 维基百科上的 LESS 条目包括了 LESS
    的历史,功用介绍,与其余样式语言的相持统一等材质。
  • LESS.app 官方网站LESS.app 的官方网站,提供了 LESS.app
    的下载,录像介绍,相关难点回复等资料。
  • twitter提供的 bootstrap由 推特(TWTR.US) 共享出的 CSS
    工具包,使开发者可以轻松的创导出精粹的界面。其中不少地点都拔取了
    LESS。
  • SASS官方网站包罗了 SASS 和 SCSS
    的下载,扶助文档,以及在线教程等材质。
  • developerWorks Web development 专区:通过专门关于 Web
    技术的篇章和科目,增加您在网站开发方面的技艺。
  • developerWorks Ajax 能源大旨:那是有关 Ajax
    编程模型音信的一站式宗旨,包蕴过多文档、教程、论坛、blog、wiki
    和音讯。任何 Ajax 的新新闻都能在此地找到。
  • developerWorks Web 2.0 财富宗旨,那是关于 Web 2.0
    相关音讯的一站式宗旨,包涵大气 Web 2.0
    技术文章、教程、下载和相关技能财富。您还足以经过 Web 2.0
    新手入门栏目,飞快明白 Web 2.0 的相关概念。
  • 查看 HTML5 专题,掌握更加多和 HTML5 相关的文化和倾向。

讨论

  • 进入 developerWorks
    国语社区。查看开发人员牵动的博客、论坛、组和维基,并与其它developerWorks 用户交换。

LESS,小编要开首学习LESS啦!,作者要less LESS
是多个风行的样式表语言,它提供了 CSS3 也尚无完成的有余成效,让你编写 CSS
越发便宜,…

相关文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注

*
*
Website