Less从0开始:变量

213 阅读2分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第17天,点击查看活动详情

在Less中,提供了定义变量的能力,通过@符号可以声明变量。

一、变量储存一个CSS值

定义变量和使用变量都直接使用@符号。

@boxHeight: 100px;
@boxWidth: 100px;
@box1Bg: #000;
@box2Bg: red; //在样式中引用变量 

#box1{ 
    width: @boxWidth;
    height: @boxHeight; 
    background: @box1Bg; 
}

#box2{ 
    width: @boxWidth; 
    height: @boxHeight;
    background: @box2Bg; 
}

二、变量存储一个CSS选择器

通过@可以声明一个CSS的选择器,这个选择器可以包含符号(. # > 等),可以不包含符号,或者可以是一小截字符串。

把变量当做CSS选择器时,需要通过 @{变量名} 的方式调用。

1、包含符号

@b: .box; 
@{b}{
    width: 100px;
    height: 100px;
}

2、不包含符号

@b: box;

#@{b}{
    width: 100px;
    height: 100px;
}

3、字符串片段

@b: iv;

#d@{b} { 
    width: 100px;
    height: 100px;
}

4、多个变量组合

@r: red;
@b: Box;

#@{r}@{b} {
    width: 100px;
    height: 100px;
}

转换得到的结果

#redBox { width: 100px; height: 100px; }

注意注意:变量作为属性名可以这样用,但这种方式不能用在属性值上,如

@a: r;
@b: ed; 

.box { color: @a@b; }

上面的写法不会报错,但是不是我们想要得到的red,而是得到 re d ,是的,中间有个空格,破坏了属性名。

除非你使用多属性值的CSS样式,比如border,因为它们每个值之间是用空格分开的。

@w: 1px;
@t: solid;
@c: red; 

#box { border: @w@t@c; } 
#box { border: @w @t @c; } //两种写法都没有问题

如果你希望去除属性值中变量间的空格,可以这样实现:

#box { padding: ~"@{i}px"; }

三、在CSS引号中同样可以使用变量

@images: "../img"; //需要加引号 

body { background: url("@{images}/dog.png"); }

四、变量储存CSS代码

定义的时候,使用{} 把内容包裹起来。

引用的时候,类似调用方法,@all();

@all:{ 
    height: 300px;
    width: 100px;
    background: darkblue; 
}; 

#box1{ @all(); }

经过上面的学习,我们发现,其实变量可以在Less文件中的任意处使用,只是调用的方式不同,作为属性名或属性值中引号内的字符串使用时,需要使用@{ 变量名 } 的方式,而作为属性值,直接 @变量名即可。

五、变量的延迟加载

变量在同一作用域下可以先使用再声明,类似Js的变量提升。

p{ color: @r; }

@r:red;