less用法总结

337 阅读3分钟

变量

@with: 10px;
@height: @with + 10px;
#header {
    width: @width;
    height: @height;
}
  • 上面文件编译成下面
#header {
    width: 10px;
    height: 20px;
}

混合

.bodered {
    border-top: dotted 1px black;
    border-bottom: solid 2px black;
}
  • 混合.bodered的样式
. post {
    color: red;
    .bordered();
}

嵌套

#header {
    color: black;
}
#header .navigation {
    font-size: 12px;
}
#header .logo {
    width: 300px;
}
  • 嵌套后如下
#header {
    color: black;
    .navgation {
        font-size:12px;
    }
    .logo {
        width: 300;
    }
}
  • 可以和伪类一起使用
.clearfix {
    display: block;
    zoom: 1;
    &:after {
        content: "";
        display: block;
    }
}
  • @media @support 也可以嵌套
.component {
  width: 300px;
  @media (min-width: 768px) {
    width: 600px;
    @media  (min-resolution: 192dpi) {
      background-image: url(/img/retina2x.png);
    }
  }
  @media (min-width: 1280px) {
    width: 800px;
  }
}

  • 编译为下面文件
.component {
  width: 300px;
}
@media (min-width: 768px) {
  .component {
    width: 600px;
  }
}
@media (min-width: 768px) and (min-resolution: 192dpi) {
  .component {
    background-image: url(/img/retina2x.png);
  }
}
@media (min-width: 1280px) {
  .component {
    width: 800px;
  }
}

运算

  • 不同单位计算时,以第一个出现的单位为准
// numbers are converted into the same units
@conversion-1: 5cm + 10mm; // result is 6cm
@conversion-2: 2 - 3cm - 5mm; // result is -1.5cm

// conversion is impossible
@incompatible-units: 2 + 5px - 3cm; // result is 4px

// example with variables
@base: 5%;
@filler: @base * 2; // result is 10%
@other: @base + @filler; // result is 15%

calc 特例

  • 为了与css保持兼容,calc() 并不对数学表达式进行计算,但是在嵌套函数中会计算变量和数学公式的值
@var50vh/2
width: calc(50% + (@var - 20px)); // result is calc(50% + (25vh - 20px) );

escaping

  • 转义允许使用任何字符串或者变量值
  • 用法~'anything' 或者 ~"anything"
@min768: ~"(min-width: 768px)";
.element {
  @media @min768 {
    font-size: 1.2rem;
  }
}

  • 编译为
@media (min-width: 768px) {
  .element {
    font-size: 1.2rem;
  }
}

  • less3.5以后可以使用简写的方式
@min768: (min-width: 768px);
.element {
  @media @min768 {
    font-size: 1.2rem;
  }
}

函数

  • 利用 percentage 函数将 0.5 转换为 50%,将颜色饱和度增加 5%,以及颜色亮度降低 25% 并且色相值增加 8 等用法
@base: #f04615;
@width: 0.5;

.class {
  width: percentage(@width); // returns `50%`
  color: saturate(@base, 5%);
  background-color: spin(lighten(@base, 25%), 8);
}

命令空间和选择器

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

  • 如果想复用.button的样式
#header a {
  color: orange;
  #bundle.button();  // can also be written as #bundle > .button
}

maps

  • 从少于3.5的版本开始,您还可以使用mixin和ruleset作为值的映射。
#colors() {
  primary: blue;
  secondary: green;
}

.button {
  color: #colors[primary];
  border: 1px solid #colors[secondary];
}
// .button 编译成如下文件
.button {
  color: blue;
  border: 1px solid green;
}

作用域

  • less中的作用域与css中的作用域非常相似。首先在本地查找变量和混合函数,如果找不到它们,则从“父”范围继承。
@var: red;

#page {
  @var: white;
  #header {
    color: @var; // white
  }
}

  • 与CSS自定义属性一样,mixin和变量定义不必放在引用它们的行之前。因此下面的代码与前面的示例相同:
@var: red;

#page {
  #header {
    color: @var; // white
  }
  @var: white;
}

注释

/* 一个块注释
 * style comment! */
@var: red;

// 这一行被注释掉了!
@var: white;

import

  • “导入”的工作方式和你预期的一样。你可以导入一个 .less 文件,此文件中的所有变量就可以全部使用了。如果导入的文件是 .less 扩展名,则可以将扩展名省略掉:
@import "library"; // library.less
@import "typo.css";