less常用特性

less并非多么高大上的东西,无非就是个编写CSS的工具,让我们像编程一样来书写CSS,关于less常用的特性无非几个,下面简单将常用这些特性简单记录。方便以后查阅

less编译环境

less->CSS的方法有多种,比如使用 grunt或者lgulp等构建工具配合相应的插件来完成less的自动编译。以gulp为例,gulpfile.js的代码如下。

var less = require('gulp-less');
var path = require('path');
var gulp=require('gulp');
gulp.task('less', function () {
  gulp.src('less/*.less')
    .pipe(less({
      paths: [ path.join(__dirname, 'less', 'includes') ]
    }))
    .pipe(gulp.dest('css'));
});

gulp.watch(['less/*.less'], ['less']) 
gulp.task('default', ['less']);

通过watch 来见监听less文件的变化自动运行less任务。从而完成less->css的自动编译,可以查看生成的CSS文件

我常用的less 特性。

@import

在标准的CSS中,@import必须在所有其他类型的规则之前。但是Less不在乎你把@import语句放在什么位置。
@import语句会通过Less依赖文件扩展名的方式区别对待不同的文件:

  • 如果文件有一个.css扩展名,则将它作为CSS对象,同时@import语句保持不变
  • 如果有其他扩展名,则作为Less对象,然后导入它。
  • 如果没有扩展名,则插入.less,然后将它作为Less文件导入包含进来。
  • 使用@import (reference)导入外部文件,但是不添加导入的样式到编译输出中,只引用。

变量

LESS 允许开发者自定义变量,变量可以在全局样式中使用,变量使得样式修改起来更加简单。变量@开头,全局的变量可以在多个less文件之间共用

@light-blue: @nice-blue + #111;
#header {
  color: @light-blue;
}

生成的CSS 如下

.mythemes tableBorder { 
  border: 1px solid #b5bcc7; 
 }

同时还支持变量的计算。

@width: 10px + 5;
  .btn{
    width:@width;
  }

编译为:

@width: 10px + 5;
  .btn{
    width:@width;
  }

变量查找以及变量作用域:在定义一个变量两次时,只会使用最后定义的变量,Less会从当前作用域中向上搜索。这个行为类似于CSS的定义中始终使用最后定义的属性值。

@var: 0;
.class {
  @var: 1;
  .brass {
    @var: 2;
    three: @var;
    @var: 3;
  }
  one: @var;
}

编译后的CSS为:

.class {
  one: 1;
}
.class .brass {
  three: 3;
}

Mixins(混入)

在 LESS 中,混入是指在一个 CLASS 中引入另外一个已经定义的 CLASS,就像在当前 CLASS 中增加一个属性一样。

less源文件

.bordered {
  border-top: dotted 1px black;
  border-bottom: solid 2px black;
}
#menu a {
  color: #111;
  .bordered;
}

编译后的CSS文件:

.bordered {
  border-top: dotted 1px black;
  border-bottom: solid 2px black;
}
#menu a {
  color: #111;
  border-top: dotted 1px black;
  border-bottom: solid 2px black;
}

如果不想在CSS中保留原来的 .bordered

可以将 .bordered 修改为 bordered() ,同时还支持混入参数,支持默认参数。

less文件

.bordered(@width:5px) {
  border-top: dotted 1px black;
  border-bottom: solid 2px black;
  width:@width;
}
#menu a {
  color: #111;
  .bordered;
}
.post a {
  color: red;
  .bordered(10px);
}

编译后的文件

#menu a {
  color: #111;
  border-top: dotted 1px black;
  border-bottom: solid 2px black;
  width: 5px;
}
.post a {
  color: red;
  border-top: dotted 1px black;
  border-bottom: solid 2px black;
  width: 10px;
}

像 JavaScript 中 arguments一样,Mixins 也有这样一个变量:@arguments。@arguments 在 Mixins 中具是一个很特别的参数,当 Mixins 引用这个参数时,该参数表示所有的变量,很多情况下,这个参数可以省去你很多代码。

.box1(@x:0,@y:0,@blur:1px,@color:#000){ 
   -moz-box-shadow: @arguments; 
   -webkit-box-shadow: @arguments; 
   box-shadow: @arguments; 
 } 
 .mybox { 
     .box1(10px,12px,13px,red); 
 }

编译后:

.mybox {
  -moz-box-shadow: 10px 12px 13px red;
  -webkit-box-shadow: 10px 12px 13px red;
  box-shadow: 10px 12px 13px red;
}

嵌套

在写CSS的时候 为了避免造成CSS污染 我们会采用命名空间的机制,在less中可以通过嵌套来解决。

less文件

.myspace{
     .class1{
         width:20px
     }
     .class2{
         height:30px
     }
 }

生成的CSS文件

.myspace .class1 {
  width: 20px;
}
.myspace .class2 {
  height: 30px;
}

在嵌套使用时可以通过 &访问上一级元素

#bundle {
  .button {
    display: block;
    border: 1px solid black;
    background-color: grey;
    &:hover {
      background-color: white
    }
  }
}

编译之后为

#bundle .button {
  display: block;
  border: 1px solid black;
  background-color: grey;
}
#bundle .button:hover {
  background-color: white;
}

在less中可以如果将mix和嵌套相结合。可以使用>来进行导入

比如 less文件

.myspace{
   .class1{
   width:20px
   }
   .class2{
   height:30px
   }
 }
 .redbutton{
     color:red;
     .myspace > .class2;
 }

CSS 文件

myspace .class1 {
  width: 20px;
}
.myspace .class2 {
  height: 30px;
}
.redbutton {
  color: red;
  height:
}

另外还有一些关于运算的函数 感觉意义不大 比如颜色计算的fadeIn等。

Comments(注释)

LESS 对注释也提供了支持,JavaScript 中的注释方法一样,主要有两种方式:单行注释和多行注释,这与 ,我们这里不做详细的说明,只强调一点:LESS 中单行注释 (// 单行注释 ) 是不能显示在编译后的 CSS 中,所以如果你的注释是针对样式说明的请使用多行注释

extend

extend是一个Less伪类,它会合并它所在的选择其和它所匹配的引用。

nav ul {
  &:extend(.inline);
  background: blue;
}

在上面设置的规则中,:extend选择器会在.inline类出现的地方在.inline上应用”扩展选择器”(也就是nav ul)。声明块保持原样,不会带有任何引用扩展(因为扩展并不是CSS)。

extend即为把当前的选择的器应用到相应的选择器定义的样式中,有点像组合的意思,跟混合的作用类似,基本是复用之前定义的样式,mix是将选择的样式引进来,extend是将当前的选择器。添加到之前定义的样式处。(有点绕啊)看代码吧

less文件

nav ul {
      &:extend(.inline);
      background: blue;
    }
    .inline {
      color: red;
    }

输出CSS:

nav ul {
  background: blue;
}
.inline,
nav ul {
  color: red;
}

另外还有一些关于运算的函数 感觉意义不大 比如颜色计算的fadeIn等。

Comments(注释)

LESS 对注释也提供了支持,JavaScript 中的注释方法一样,主要有两种方式:单行注释和多行注释,这与 ,我们这里不做详细的说明,只强调一点:LESS 中单行注释 (// 单行注释 ) 是不能显示在编译后的 CSS 中,所以如果你的注释是针对样式说明的请使用多行注释