目录
[1 变量](#1 变量)
[1.1 选择器变量](#1.1 选择器变量)
[1.2 属性变量](#1.2 属性变量)
[1.3 url变量](#1.3 url变量)
[1.4 声明变量](#1.4 声明变量)
[1.5 变量的运算](#1.5 变量的运算)
[1.6 变量的作用域](#1.6 变量的作用域)
[1.7 变量定义变量](#1.7 变量定义变量)
[2 嵌套](#2 嵌套)
[2.1 简单嵌套](#2.1 简单嵌套)
[2.2 & 的使用](#2.2 & 的使用)
[2.3 媒体查询](#2.3 媒体查询)
[3 混合](#3 混合)
[3.1 无参数方法](#3.1 无参数方法)
[3.2 默认参数方法](#3.2 默认参数方法)
[3.3 方法的匹配模式](#3.3 方法的匹配模式)
[3.4 方法的命名空间](#3.4 方法的命名空间)
[3.5 方法的条件筛选](#3.5 方法的条件筛选)
[3.6 数量不定的参数](#3.6 数量不定的参数)
[3.7 方法使用 !inportant](#3.7 方法使用 !inportant)
[3.8 循环方法 (递归调用)](#3.8 循环方法 (递归调用))
[3.9 属性拼接](#3.9 属性拼接)
[3.10 基于混合的映射](#3.10 基于混合的映射)
[4 继承](#4 继承)
[4.1 extend 关键字的使用](#4.1 extend 关键字的使用)
[4.2 all 全局搜索替换](#4.2 all 全局搜索替换)
[4.3 减少代码的重复性](#4.3 减少代码的重复性)
[5 条件表达式](#5 条件表达式)
[5.1 带条件的混合](#5.1 带条件的混合)
[5.2 类型检测函数](#5.2 类型检测函数)
[5.3 单位检测函数](#5.3 单位检测函数)
[6 函数](#6 函数)
[7 导入](#7 导入)
[7.1 导入但是不编译](#7.1 导入但是不编译)
[7.2 once 导入相同的文件只会执行一次](#7.2 once 导入相同的文件只会执行一次)
[7.3 multiple 导入相同的文件可以执行多次](#7.3 multiple 导入相同的文件可以执行多次)
1 变量
1.1 选择器变量
【less】
            
            
              css
              
              
            
          
          @mySelecxtor: #sp;
@wrap: warp;
@{mySelecxtor} {
    font-size: 60px;
    font-family: 'Courier New', Courier, monospace;
    color: yellow;
}
.@{wrap} {
    width: 100px;
    height: 100px;
}
#@{wrap} {
    width: 200px;
    height: 200px;
}【css】
            
            
              css
              
              
            
          
          #sp {
  font-size: 60px;
  font-family: 'Courier New', Courier, monospace;
  color: yellow;
}
.warp {
  width: 100px;
  height: 100px;
}
#warp {
  width: 200px;
  height: 200px;
}1.2 属性变量
【less】
            
            
              css
              
              
            
          
          @borderStyle: border-style;
@solid: solid;
.wrap{
    @{borderStyle}: @solid;
}【css】
            
            
              css
              
              
            
          
          .warp {
  border-style: solid;
}1.3 url变量
当有相同的根目录时,使用这个比较方便
【less】
            
            
              css
              
              
            
          
          @images: "../images";
.box1 {
    background: url("@{images}/111.jpg");
}【css】
            
            
              css
              
              
            
          
          .box1 {
  background: url("../images/111.jpg");
}1.4 声明变量
类似于声明一个函数,使用时,加小括号调用
【less】
            
            
              css
              
              
            
          
          @background: { background: #000; }
#main {
    @background();
}【css】
            
            
              css
              
              
            
          
          #main {
  background: #000;
}1.5 变量的运算
在less中变量可以进行 + - * / 运算
【less】
            
            
              css
              
              
            
          
          @color: blue;
@border: 5px + 10;  // 在连接运算的时候,注意添加空格
h1 {
    font-size: @border *2 ;
    color: @color;
}
.box {
    font-size: @border + 10;
    font-family: 楷体;
}【css】
            
            
              css
              
              
            
          
          h1 {
  font-size: 30px;
  color: blue;
}
.box {
  font-size: 25px;
  font-family: 楷体;
}1.6 变量的作用域
会优先使用距离自己更近的变量及其的值
【less】
            
            
              css
              
              
            
          
          @new: @a;
@a: 10px;
#main {
    width: @new;
    @a: 20px;
}
#sidebar {
    width: @new;
}【css】
            
            
              css
              
              
            
          
          #main {
  width: 20px;
}
#sidebar {
  width: 10px;
}1.7 变量定义变量
【less】
            
            
              css
              
              
            
          
          @fond: @var;
@var: '666';
#wrap::after{
    content: @fond;
}【css】
            
            
              css
              
              
            
          
          #wrap::after {
  content: '666';
}2 嵌套
2.1 简单嵌套
【less】
            
            
              css
              
              
            
          
          .container {
    width: 100%;
    height: 100%;
    #wrap {
        width: 200px;
        height: 300px;
        li {
            width: 100px;
            height: 100px;
        
        }
        a {
            color: pink;
        }
    }
}【css】
            
            
              css
              
              
            
          
          .container {
  width: 100%;
  height: 100%;
}
.container #wrap {
  width: 200px;
  height: 300px;
}
.container #wrap li {
  width: 100px;
  height: 100px;
}
.container #wrap a {
  color: pink;
}2.2 & 的使用
&表示当前选择器的父级
【less】
            
            
              css
              
              
            
          
          #content {
    a {
        color: pink;
        &:hover {
            color: red;
        }
    }
}【css】
如果不加 & 符,就会把 :hover 当作一个选择器
            
            
              css
              
              
            
          
          #content a {
  color: pink;
}
#content a:hover {
  color: red;
}2.3 媒体查询
【less】
            
            
              css
              
              
            
          
          #main {
    @media screen {
        @media (max-width: 768px) {
            width: 100px;  
        }
    }
}【css】
            
            
              css
              
              
            
          
          @media screen and (max-width: 768px) {
  #main {
    width: 100px;
  }
}3 混合
3.1 无参数方法
【less】
在这边.card 和 .card()是等价的,为了区分,建议使用函数名加括号的方式
            
            
              css
              
              
            
          
          .card() {
    background-color: yellow;
    box-shadow: 0 1px 2px rgba(0, 0, 0, 0.15);
    -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.15);
}
#wrap {
    .card();
}【css】
            
            
              css
              
              
            
          
          #wrap {
  background-color: yellow;
  box-shadow: 0 1px 2px rgba(0, 0, 0, 0.15);
  -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.15);
}3.2 默认参数方法
【less】
            
            
              css
              
              
            
          
          .border(@a:10px, @b:50px, @c:30px, @color: red) {
    border: 1px solid @color;
    box-shadow: @arguments;        // @arguments 表示使用全部参数
}
#wrap2{
    .border()
}【css】
            
            
              css
              
              
            
          
          #wrap2 {
  border: 1px solid red;
  box-shadow: 10px 50px 30px red;
}3.3 方法的匹配模式
【less】
            
            
              css
              
              
            
          
          .triangle(top, @width: 20px, @color: green) {
    border-color: @color transparent transparent  transparent;
}
.triangle(right, @width: 20px, @color: green) {
    border-color: transparent @color transparent  transparent;
}
.triangle(bottom, @width: 20px, @color: green) {
    border-color: transparent transparent @color transparent;
}
.triangle(left, @width: 20px, @color: green) {
    border-color: transparent transparent transparent @color;
}
.triangle(@_, @width: 20px, @color: green) {
    border-style: solid;
    border: @width;
}
#main {
    .triangle(bottom, 50px, blue);
}@_ 是 Less 中的一个占位符参数,它的作用是接受任意数量的无名参数。在这个例子中,我们使用了这个占位符参数来定义 .triangle 类,使得它可以接受不同的方向参数(top、right、bottom、left)以及可选的宽度和颜色参数。这样我们就可以轻松地创建各种形状和颜色的三角形,而不需要针对每种情况都定义一个新类。
【css】
            
            
              css
              
              
            
          
          #main {
  border-color: transparent transparent blue transparent;
  border-style: solid;
  border: 50px;
}3.4 方法的命名空间
【less】
            
            
              css
              
              
            
          
          #card {
    background: red;
    .d(@w: 300px){
        width: @w;
        #a(@h: 300px) {
            height: @h;
        }
    }
}
#wrap3 {
    #card > .d > #a(100px);  // 使用 > 号时,父元素不能加括号
}
#wrap4 {
    #card > .d(100px);
}【css】
            
            
              css
              
              
            
          
          #card {
  background: red;
}
#wrap3 {
  height: 100px;
}
#wrap4 {
  width: 100px;
}3.5 方法的条件筛选
【less】
            
            
              css
              
              
            
          
          #c {
    // when and   &&
    .border1(@width, @color, @style) when (@width >= 100px) and (@color = red) {
        border: @width @style @color;
    }
    // when not   !
    .border2(@width, @color, @style) when not (@width < 100px) {
        border: @width @style @color;
    }
 
    // 逗号分隔符  ||
    .border3(@width, @color, @style) when (@width > 100px), (@color = red) {
        border: @width @style @color;
    }
}
#mainN {
    #c>.border1(100px, red, solid);
}【css】
            
            
              css
              
              
            
          
          #mainN {
  border: 100px solid red;
}3.6 数量不定的参数
【less】
... 为ES6中的扩展运算符
            
            
              css
              
              
            
          
          .boxSha(...) {
    box-shadow: @arguments;
}
#mainN2 {
    .boxSha(1px 2px 3px red);
}【css】
            
            
              css
              
              
            
          
          #mainN2 {
  box-shadow: 1px 2px 3px red;
}3.7 方法使用 !inportant
【less】
            
            
              css
              
              
            
          
          .test {
    color: red;
    margin-left: 30px;
}
.M {
    .test() !important;
}【css】
            
            
              css
              
              
            
          
          .M {
  color: red !important;
  margin-left: 30px !important;
}3.8 循环方法 (递归调用)
【less】
            
            
              css
              
              
            
          
          .generate-columns(4);
.generate-columns(@n, @i: 1) when (@i <= @n) {
    .column-@{i} {
        width: (@i / @n) * 100%;
    }
    .generate-columns(@n, (@i + 1));
}【css】
            
            
              css
              
              
            
          
          .column-1 {
  width: 25%;
}
.column-2 {
  width: 50%;
}
.column-3 {
  width: 75%;
}
.column-4 {
  width: 100%;
}3.9 属性拼接
+代表逗号 +_ 代表空格
【less】
            
            
              css
              
              
            
          
          .b() {
    box-shadow+: inset 1px 1px 2px #555;
}
.Mi {
    .b();
    box-shadow+: 1px 1px 2px #aa2828;
}
// -----------------------------------------
.Animation() {
    transform+_: scale(2);
}
.Mai {
    .Animation();
    transform+_: rotate(15reg);
}【css】
            
            
              css
              
              
            
          
          .Mi {
  box-shadow: inset 1px 1px 2px #555, 1px 1px 2px #aa2828;
}
.Mai {
  transform: scale(2) rotate(15reg);
}3.10 基于混合的映射
【less】
            
            
              css
              
              
            
          
          #colors() {
  primary: blue;
  secondary: green;
}
.button {
  color: #colors[primary];
  border: 1px solid #colors[secondary];
}【css】
            
            
              css
              
              
            
          
          .button {
  color: blue;
  border: 1px solid green;
}4 继承
4.1 extend 关键字的使用
【less】
            
            
              css
              
              
            
          
          .a {
    color: rgb(208, 0, 255);
    .b {
        letter-spacing: 40px;
        font-weight: bold;
    }
}
.main{
    font-size: 40px;
    &:extend(.a);
    &:extend(.a .b);
}【css】
            
            
              css
              
              
            
          
          .a,
.main {
  color: #d000ff;
}
.a .b,
.main {
  letter-spacing: 40px;
  font-weight: bold;
}
.main {
  font-size: 40px;
}4.2 all 全局搜索替换
【less】
            
            
              css
              
              
            
          
          #main1 {
    width: 200px;
}
#main1 {
    &::after{
        content: 'less is good';
    }
}
#wrap:extend(#main1 all) {
    width: 300px;
}继承所有的 #main1
【css】
            
            
              css
              
              
            
          
          #main1,
#wrap {
  width: 200px;
}
#main1::after,
#wrap::after {
  content: 'less is good';
}
#wrap {
  width: 300px;
}4.3减少代码的重复性
【less】
            
            
              css
              
              
            
          
          .Method {
    width: 200px;
    &::after{
        content: 'less is good';
    
    }
}
#M {
    .Method
}【css】
            
            
              css
              
              
            
          
          #M {
  width: 200px;
}
#M::after {
  content: 'less is good';
}5 条件表达式
5.1 带条件的混合
比较运算符: = > < >= <=
【less】
            
            
              css
              
              
            
          
          .mixin(@a) when(lightness(@a) >= 50%) {
    background-color: black;
}
.mixin(@a) when(lightness(@a) < 50%) {
    background-color: white;
}
.mixin(@a) {
    color: @a;
}
.class1 {
    .mixin(#ddd)
}
.class2 {
    .mixin(#555)
}【css】
            
            
              css
              
              
            
          
          .class1 {
  background-color: black;
  color: #ddd;
}
.class2 {
  background-color: white;
  color: #555;
}5.2 类型检测函数
【less】
            
            
              css
              
              
            
          
          /* 
    检测值的类型:
    iscolor
    isnumber
    isstring
    iskeyword
    isurl
    ....
*/
.mixin1(@a: #fff; @b:0;) when(iscolor(@a)) {
    background-color: @a;
}
.mixin2(@a: #fff; @b:0;) when(isnumber(@b)) {
    background-color: @b;
}
.class3 {
    .mixin1(#ddd, 10);
    .mixin2(#ddd, 10);
}【css】
            
            
              css
              
              
            
          
          .class3 {
  background-color: #ddd;
  background-color: 10;
}5.3 单位检测函数
            
            
              css
              
              
            
          
          /* 
    检测值的单位;
    ispixel
    ispercentage
    isem
    isunit
    ......
*/6 函数
这边只介绍一个 color() 函数,用的时候直接查官网就行了
【less】
            
            
              css
              
              
            
          
          body {
    color: color("#fff");  // color函数
}【css】
            
            
              css
              
              
            
          
          body {
  color: #fff;
}7 导入
在一个 .less文件中导入其它 .less文件
            
            
              css
              
              
            
          
          @import './nav.less';7.1 导入但是不编译
            
            
              css
              
              
            
          
          @import (reference) './bootstrap.less';7.2 once 导入相同的文件只会执行一次
            
            
              css
              
              
            
          
          @import (once) './bootstrap.less';
@import (once) './bootstrap.less';    // 不会执行了7.3 multiple 导入相同的文件可以执行多次
            
            
              css
              
              
            
          
          @import (multiple) './bootstrap.less';
@import (multiple) './bootstrap.less';    // 也会执行