CSS预处理Less

Less是一门CSS预处理语言,它扩展了CSS语言,增加了变量、混合、函数等特性,使CSS更易维护和扩展。
Less的官方网站有
英文:http://www.lesscss.org/
中文:http://www.lesscss.net/

Less只有让编译才能被浏览器解析;Less的编译软件有好多:
1:Koala,国人开发的全平台的Less编译工具 网站:http://koala-app.com/
2:WinLess,Windows下的Less编译软件 网站:http:winless.org
3:CodeKit,MAC平台下的Less编译软件 网站:http:incident57.com/codekit/index.html
其中Koala,个人感觉很好用,国人开发,都是中文。

一 嵌套:
原CSS代码

.conten ul{
    list-style:none;
}
.conten li{
  height:25px;
  line-height:25px;
  paddling-left:15px;
  background:url('arr.jpg');
}
.conten li a{   
text-decoration:none;
color:#333
}

Less代码

.conten{
  ul{
    list-style:none;
  }
 li{
    height:25px;
    line-height:25px;
    paddling-left:15px;
    background:url('arr.jpg');
    a{
        text-decoration:none;
        color:#333;
      }
  }
}

二 Less的注释
less的注释有两种一个是 //注释,一个是/* * /注释,其中//的注释不会编译到CSS当中,只有/**/才会被编译到CSS当中。
三 变量
定义变量的话,它有许多定义变量的东西,
1 普通变量
普通变量定义方式@
Less写法:

@blue:#5b83ad;
header{
color:@blue;
}

编译结果

header{
color:#5b83ad;
}

注意变量只能声明一次,他们都是“常量”;
2 作为选择器和属性名
使用时将变量以@{变量名}的方式使用,意思说是他可以当做CSS的选择器,Less代码:

@mySelector:width;
@{mySelector}{
@{mySelector}:960px;
height:500px;
}

编译之后CSS代码

.width{
width:960px;
height:500px;
}

3 作为URL
就先比如百度的LOGO的,百度的LOGO是https://www.baidu.com/img/bdlogo.png,使用时,使用“”把变量的值扩起来,它同样是以@{变量名}的方式使用,Less的代码

@imgurl:"https://www.baidu.com/img/"
header{
background:url("@{imgurl}bdlogo.png");
}

4 延迟加载
什么是延迟加载,延迟加载就是声明的变量是延迟加载的,在使用前不一定要预先声明,就像JS中var变量提升一样,你的变量在之前声明还是之后声明是没有任何变化的。
二 混合
1: 基本的混合
混合就是一种将一系列属性从一个规则集引入(混合)到另一个规则集的方式,简单来说,就是在CSS中定义一个类,这个类能干什么呢,这个类可以写一些可重用的属性,Less代码:

.borderred{
border-top:dotted 1px black;
border-bottom:solid 2px black;
}
header{
font-size:20px;
.borderred;
}
footer{
font-size:30px;
.borderred;
}

CSS代码是

header{
font-size:20px;
border-top:dotted 1px black;
border-bottom:solid 2px black;
}
footer{
font-size:30px;
border-top:dotted 1px black;
border-bottom:solid 2px black;
}
2 : 不带输出的混合

什么是不带输出的混合,其实和上面差不多,上面代码在编译CSS的时候,会把你定义的类也编译出来,然后我们只用在你定义类的后面写上一个()就可以啦,就像是这样 .borderred();

3:带选择器的混合
什么是带选择器的混合,就是这个类有一个伪类的属性,而这个类里面的自己,也就是JS里面的this,这个this写成&符号。Less代码:

.my-hover-mixin(){
  &:hover{
    border:1px solid red;
  }
}
button{
.my-hover-mixin;
}

编译之后的代码是

buttom:hover{
  border:1px solid red;
}

4 :带参数的混合
什么是的带参数的混合,简单的来说就是JS的function封装,可以进行传参数。Less代码

.border(@color){
border:2px solid @color;
}
h1{
  &:hover{
    .border(green);
  }
}
h2{
  &:hover{
    .border(#000);
  }
}

编译之后CSS的代码

h1:hover{
  border:2px solid green;
}
h2:hover{
  border:2px solid #000;
}

5:带参数并且有默认值
这又是什么,这其实就是说如果这个混合没传参数,是有默认值的,如果传了参数就是传的参数,怎么写呢。Less代码:

.border(@color:#000){
  border:2px solid @color;
}
h1{
  &:hover{
    .border();
  }
}
h2{
  &:hover{
    .border(#666);
  }
}

编译之后的CSS代码

h1:hover{
  border:2px solid #000;
}
h2:hover{
  border:2px solid #666;
}

6:带多个参数的混合
什么是带多个参数的混合,一个组合可以带多个参数,参数之间可以用逗号或者分号分割,但是推荐使用分号分割,因为逗号符号有2个意思,它可以解释为mixins参数分隔符或者CSS列表分隔符。官网是这样说的:
1:两个参数,并且每个参数都是逗号分割的列表:.name(1,2,3;something,ele)
2:三个参数,并且每个参数都包含一个数字:.name(1,2,3)
3:使用伪造的分号创建mixin,调用的时候参数包含一个逗号分割的CSS列表:.name(1,2,3;),
4:逗号分割默认值:.name(@param1:red,blue)
Less代码:

.mixin(@color;@padding:xxx;@margin:2){
color:@color;
padding:@padding;
margin:@margin @margin @margin @margin;
}
.divaize{
.mixin(1,2,3;something,ele;12)
}
.divaize{
.mixin(1,2,3)
}

编译的CSS代码:

.divaize{
color:1,2,3;
padding:something,ele;
margin:12 12 12 12;
}
.divaize{
color:1;
padding:2;
margin:3 3 3 3;
}

简单点来说,就是如果传参的括号里面全部都是以“,”分割,那么会依次传给各个参数值,
如果传参的括号里面既有“,”又有“;”那么,会把“;”前面的看作一个整体,传给一个值。
7:命名参数
命名参数就是引用mixin时可以通过参数名称而不是参数的位置来为mixin提供参数值。任何参数都已通过它的名称来引用,这样就不必按照任意特定的顺序来使用参数Less代码:

.mixin(@color:black;@margin:10px;@padding:20px){
color:@color;
margin:@margin;
padding:@padding;
}
.class1{
.mixin(@margin:20px;@color:#33acfe);
}
.class2{
.mixin(#efca44;@padding:40px);
}

编译之后的CSS代码

.class1{
color:#33acfe;
margin:20px;
padding:20px;
}
.class2{
color:#efca44;
margin:10px;
padding:40px;
}

8:@arguments变量
@arguments变量代表是所有的可变参数,注意@arguments;代表所有可变参数是,参数的先后顺序就是你的()内的参数的先后顺序,值的位置和个数也是一一对应的,只有一个值,把值赋值给第一个,两个值,赋值给第一个和第二个,三个值,分别赋值给第三个......以此类推,但是需要主要的是假如我想给第一个和第三个赋值,你不能写(值1,,值3),必须把原来的默认值写上去。
9:匹配模式
匹配模式:传值的时候定义一个字符,在使用的时候使用这个字符, 就调用这条规则Less代码:

.border(all;@w:5px){
border-radius:@w;
}
.border(t_l;@w:5px){
border-top-left-radius:@w;
}
.border(b_l;@w:5px){
border-bottom-left-radius:@w;
}
//调用Less
.border{
.border(all,50%);
}
.border{
.border(t_l,50%);
}

编译CSS代码

.border{
border-radius:50%;
}
.border{
border-top-left-radius:50%;
}

就是说我想用什么样的格式就定义的时候前面加上一个字符,调用的时候也加上这个字符。
10:得到混合的中变量的返回值
你可以将混合中的值进行运算,得到你想要的一个值。Less代码

@.average(@x,@y){
@average:((@x + @y)/2)
}
div{
.average(16px,50px);
padding:@average;
}

编译之后CSS代码

div{
padding: 33px;
}

三:运算
运算的说明:任何数值,颜色和变量都可以进行运算。
Less会为你自动推断数值的单位,所以你不必每一个值都加上单位,注意:运算符与值之间必须以空格分开,涉及优先级时以()进行优先级运算Less运算:

.wp{
width:450px + 450;
}

编译结果:

.wp{
width:900px;
}

颜色值运算时,Less在运算时,先将颜色值转换为rgb模式,然后在转换为16进制的颜色值并且返回。Less代码:

.content{
background:#000000 + 21;
}

编译之后的CSS:

.content{
background:#212121;
}

注意:既然是转换为rgb的取值范围是0-255,所以我们计算的时候不能超过这个区间,超过后默认使用最大值255。
四:命名空间
将一些需要的混合组合在一起,可以通过嵌套多层id或者class实现!Less代码:

#bgcolor(){
background:#fff;
  .a{
        color:#888;
    &:hover{
        color:#ff6600
    }
    .b{
      background:#ff0000;
    }
  }
}

.bgcolor1{
background:#fdfee0;
#bgcolor > .a;
}
.bgcolor2{
#bgcolor > .a>.b;
}

CSS代码

.bgcolor{
  background:#fdfee0;
  color:#888;
}
.bgcoloe:hover{
  color:#ff6600;
}
.bgcolor{
 background:#ff0000;
}

其中里面的>就和CSS中的子选择器一样,可以省略或者换成空格,效果是一样的。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,080评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,422评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,630评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,554评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,662评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,856评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,014评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,752评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,212评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,541评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,687评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,347评论 4 331
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,973评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,777评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,006评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,406评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,576评论 2 349

推荐阅读更多精彩内容