Less初学

什么是Less

官方文档上面说:Less 是一门 CSS 预处理语言,它扩展了 CSS 语言,增加了变量、Mixin、函数等特性,使 CSS 更易维护和扩展。

说白了Less就是动态的CSS,也就是具备函数、变量、控制语句的CSS。要知道,很多时候CSS都需要对同一个样式重复写很多遍,Less使得CSS的编写更加简单和方便。

如何使用Less

Less可以通过npm来安装

$ npm install -g less

我使用的是第三方的GUI——koala
koala使用起来非常简单,只需要将Less所在的文件夹放置到koala中配置好输出路径就可以正常使用Less来完成预处理,并且koala自带错误提示功能。
下载地址:http://koala-app.com/index-zh.html

Less详解

注释

Less新增了“//”注释法,更贴近与程序设计语言。这种注释方法在编译的时候不会被保留,也就是生成的css文件中这个注释会被 pass掉。而“/**/”这种注释法在编译的时候会被保留。

变量

Less的变量声明方法为:@+变量名

@myColor:red;
div{
  background:@myColor;
}

编译后的css为

div{
  background:red;
}


混合

什么是混合?我个人将它理解成css版本的函数

.border{
  border:1px solid black;
}
.box{
  color:white;
  background:red;
  .border;//应用.border的样式  
}

有人会问:这个Less哪里简单了,感觉反而更麻烦了。别急,往下面看。

带参数的混合

带参数的混合就更好理解了,它更向函数去靠近了

.border(@myWidth){
  border:@myWidth solid black;
}
.box{
  color:white;
  background:red;
  .border(3px);//传入参数
}

当然,混合也可以指定默认的参数,这样就不必每次都给它传参啦

.border(@myWidth:3px){
  border:@myWidth solid black;
}
.box{
  color:white;
  background:red;
  .border();//这里可以不用传参了,但是必须要有括号!
}

再看一个例子,css3针对不同浏览器做了hack,也就是增加前缀,这种hack方法的确实现了兼容各浏览器开发,但是带来的弊端就是我们必须去写大量的hack代码,不仅浪费时间,整个css文件也十分臃肿。

下面是使用Less来解决这一问题

.border(@width:3px){
  -webkit-border-radius:@width;
  -moz-border-radius:@width;
  -ms-border-radius:@width;
  border-radius:@width;
}
div{
  background:red;
  height:100px;
  width:100px;
  .border(50px);
}

表面上看起来并不简单,但是当需要多个地方使用这个border-radius的时候只需要调用.border()就可以了而不必再去写重复的代码。把它映射到高级程序设计语言中,是封装一个函数每当需要的时候去调用它方便还是每次都重新敲一遍代码方便?

匹配模式

这个有点像if语句,但是和if又有很大的区别,它是根据传入不同的参数来执行不同的样式操作

.color(r,@width:50px,@height:50px)//如果第一个参数是r则使用该样式
{
  background:red;
}
.color(b,@width:50px,@height:50px)//如果第一个参数是b则使用该样式
{
  background:blue;
}
.color(y,@width:50px,@height:50px)//如果第一个参数是r则使用该样式
{
  background:yellow;
}
.color(@_,@width:50px,@height:50px)
{
  width:@width;
  height:@height;
  .border(10px);
}

这里就和if语句不一样了,Less是根据传入的参数的不同来选择究竟进入到哪个“函数之中”。代码的最后一段有一个@_参数,它的意思是,无论匹配是否成功都会进入到这里

div{
  .color(r);
}

上述代码编译后的css为

div{
  background:red;
  width:50px;
  height:50px;
}

那么如果我输错了参数会怎样?

div{
  .color(g);
}

编译后的css就变为

div{
  width:50px;
  height:50px;
}

无论匹配是否成功,最终都会应用带有@_参数的样式。

运算

Less支持变量的运算。比如

@myWidth:300px;
div{
  width:@myWidth-100;
}

最终div的宽度就是200px,可以看到100并没有加单位px,因为@myWidth已经有单位了,所以100可以不用加单位,但是为了更加直观最好还是加上单位。

嵌套

嵌套可以说是Less最有意思的功能,也是最实用的功能。
举个例子,如果需要创建一个导航栏,样式可能会这样写

ul {
  width: 500px;
  margin: 30px auto;
  padding: 0px;
  list-style: none;
}
ul li {
  height: 30px;
  line-height: 30px;
  margin-bottom: 3px;
  background: green;
}
ul li a {
  float: left;
}
ul li a:hover {
  color: blue;
}
ul li span {
  float: right;
}

这种写法十分标准,它告诉了我们哪个位置的a标签应用了这个样式,而且标签和标签的嵌套关系也十分明了。但是如果父层的类名十分长,这种写法就比较麻烦了。

而Less模仿了html的嵌套语法

ul{
  width:500px;
  margin:30px auto;
  padding:0px;
  list-style: none;
  li{
     height:30px;
     line-height:30px;
     margin-bottom:3px;
     background:green;
     a{
       float:left;
       &:hover{//匹配上一级元素,也就是a
               color:blue;
              }
      }
     span{
          float:right;
      }
   }
}

代码中&代表着匹配它的父级选择器,在上述代码里&的父级选择器是a,也就是a:hover。


Less还有很多高级用法和库,我会继续深入学习下去的~

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

推荐阅读更多精彩内容