Less入门

Posted 积少成多

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Less入门相关的知识,希望对你有一定的参考价值。

LESS 原理及使用方式

本质上,LESS 包含一套自定义的语法及一个解析器,用户根据这些语法定义自己的样式规则,这些规则最终会通过解析器,编译生成对应的 CSS 文件。LESS 并没有裁剪 CSS 原有的特性,更不是用来取代 CSS 的,而是在现有 CSS 语法的基础上,为 CSS 加入程序式语言的特性。下面是一个简单的例子:

变量

使用@符号定义。例如:

/*变量声明*/

@base: #f938ab;
@images: "../img";
@property: color;
.box {
    /*变量引用*/
    color: @base;
}

body {
    color: #444;
    /*变量引用*/
    background: url("@{images}/white-sand.png");
}

.widget {
  @{property}: #0ee;
  [email protected]{property}: #999;
}

 

/*变量声明*/
.box {
  /*变量引用*/
  color: #f938ab;
}
body {
  color: #444;
  /*变量引用*/
  background: url("../img/white-sand.png");
}
.widget {
  color: #0ee;
  background-color: #999;
}

 

混合(Mixin)

混合就是前面定义的一个样式,后文可以直接引用。示例:

/*带参数*/

.roundedCorners(@radius: 5px) {
    -moz-border-radius: @radius;
    -webkit-border-radius: @radius;
    border-radius: @radius;
}

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

.boxMargin(@up:0,@right:0,@down:0,@left:0){
    margin: @arguments;
}

// 在另外的样式选择器中使用
#header {
    .roundedCorners;
    .boxMargin(1px,2px,3px,4px)
}

#content {
    .roundedCorners();
    .boxMargin;
}

#footer {
    .roundedCorners(10px);
}

 

/*带参数*/
/*
@arguments 在 Mixins 中具是一个很特别的参数,
当 Mixins 引用这个参数时,该参数表示所有的变量,
很多情况下,这个参数可以省去你很多代码。
*/
#header {
  -moz-border-radius: 5px;
  -webkit-border-radius: 5px;
  border-radius: 5px;
  margin: 1px 2px 3px 4px;
}
#content {
  -moz-border-radius: 5px;
  -webkit-border-radius: 5px;
  border-radius: 5px;
  margin: 0 0 0 0;
}
#footer {
  -moz-border-radius: 10px;
  -webkit-border-radius: 10px;
  border-radius: 10px;
}

 

嵌套

可以在一个css里有多个css块,以方便我们更好的组织代码,编写css模板。

#header {
    color: black;
    .navigation {
        font-size: 12px;
    }
    .logo {
        width: 300px;
    }
}


/*
有&时,解析的是同一个元素或此元素的伪类
没有&时, 解析是后代元素
*/

#header {
    color: black;
    &-navigation {
        font-size: 12px;
    }
    &-logo {
        width: 300px;
    }
    &:hover {
        color: #ccc;
    }
}

div {
    color: black;
    &-navigation {
        font-size: 12px;
    }
    &-logo {
        width: 300px;
    }
    &:hover {
        color: #ccc;
    }
}

 

#header {
  color: black;
}
#header .navigation {
  font-size: 12px;
}
#header .logo {
  width: 300px;
}
/*
有&时,解析的是同一个元素或此元素的伪类
没有&时, 解析是后代元素
*/
#header {
  color: black;
}
#header-navigation {
  font-size: 12px;
}
#header-logo {
  width: 300px;
}
#header:hover {
  color: #ccc;
}
div {
  color: black;
}
div-navigation {
  font-size: 12px;
}
div-logo {
  width: 300px;
}
div:hover {
  color: #ccc;
}

运算

任何数字、颜色或者变量都可以参与运算。下面是一组案例:

 @init: #111111;
 @width:19px;
 @height:100%;
 @transition: @init*2;
 .switchColor {
     color: @transition;
     width: @width/2;
     height: @height;
 }
.switchColor {
  color: #222222;
  width: 9.5px;
  height: 100%;
}

 

命名空间

有时候,你可能为了更好组织 CSS 或者单纯是为了更好的封装,将一些变量或者混合模块打包起来,一些属性集之后可以重复使用。
示例:

/*模块*/
#bundle {
  .button {
    display: block;
    border: 1px solid black;
    background-color: grey;
    &:hover {
      background-color: white
    }
  }
  .tab { /**/ }
  .citation { /**/ }
}

/*下面复用上面的一部分代码*/
#header a {
  color: orange;
  #bundle > .button;
}
/*模块*/
#bundle .button {
  display: block;
  border: 1px solid black;
  background-color: grey;
}
#bundle .button:hover {
  background-color: #ffffff;
}
#bundle .tab {
  /**/
}
#bundle .citation {
  /**/
}
/*下面复用上面的一部分代码*/
#header a {
  color: orange;
  display: block;
  border: 1px solid black;
  background-color: grey;
}
#header a:hover {
  background-color: #ffffff;
}

 

作用域

子类里面的优先,找不到才往父类里找。

示例:

@var: red;
#hearder{
     color: @var;
}
#page {
    color: @var;
    @var: white;
    #header {
        color: @var;
    }
}
#hearder {
  color: #ff0000;
}
#page {
  color: #ffffff;
}
#page #header {
  color: #ffffff;
}

注释

css仅支持块注释 //。less里块注释和行注释都可以使用://  /**/

导入

和css一样,你可以导入一个 .less 文件,此文件中的所有变量就可以全部使用了。如果导入的文件是 .less扩展名,则可以将扩展名省略掉:

@import "ip"; // ip.less 输出效果 = ip.less + test.less
@import "typo.css"; //支持导入css

 

以上是关于Less入门的主要内容,如果未能解决你的问题,请参考以下文章

十分钟入门less(翻译自:Learn lESS in 10 Minutes(or less))

leetcode_1292. Maximum Side Length of a Square with Sum Less than or Equal to Threshold_[二维前缀和](代码片段

前端利器之less入门

Less快速入门

十分钟入门 Less

VUE -- 十分钟入门 Less