less语法

注释

  1. 在.less文件中展示,但是不显示到编译后的.css文件中
    1. // 这个注释不会显示到.css文件中
  1. 在.less文件中展示,编译后展示到.css文件中
    1. /* 这个注释编译后,会在css文件中以双斜杠方式展示 */

变量

  1. 使用 @变量名:变量值 来声明一个变量;
  2. 作为普通属性使用时,直接使用 @变量名 来调用;
  3. 作为选择器或者属性名,使用 @{变量名} 来调用;
  4. 作为URL,使用 @{变量名} 来调用;
  5. 变量存在作用域,不同层级的 {} 中定义的变量的作用域不同
  6. 变量延迟加载

变量定义/调用示例:

  1. // 定义普通变量
  2. @width: 300px;
  3. // 定义属性名变量
  4. @positionAttr: position;
  5. // 定义选择器变量(带井号)
  6. @wrapSelector: #wrap;
  7. // 定义选择器变量(不带点符号)
  8. @innerSelector: inner;
  9. // 调用选择器变量(带井号)
  10. @{wrapSelector} {
  11. // 调用属性名变量
  12. @{positionAttr}: relative;
  13. // 调用普通变量
  14. width: @width;
  15. height: 400px;
  16. border: 1px solid;
  17. margin: 0 auto;
  18. // 调用选择器变量(不带点符号)
  19. .@{innerSelector} {
  20. @{positionAttr}: absolute;
  21. left: 0;
  22. right: 0;
  23. top: 0;
  24. bottom: 0;
  25. margin: auto;
  26. background: pink;
  27. height: 100px;
  28. width: 100px;
  29. }
  30. }

延迟加载示例:test.less

  1. @var: 0;
  2. .class {
  3. @var: 1;
  4. .brass {
  5. @var: 2;
  6. three: @var;
  7. @var: 3;
  8. }
  9. one: @var;
  10. }

编译后的:test.css

  1. .class {
  2. /* 取less中的对应作用域里面的@var */
  3. one: 1;
  4. }
  5. .class .brass {
  6. /* 取.brass中的@var,因为变量延迟加载,取@var的最后一次赋的值 */
  7. three: 3;
  8. }

嵌套

  1. 基本嵌套
    1. #wrap {
    2. position: relative;
    3. width: 300px;
    4. height: 400px;
    5. border: 1px solid;
    6. margin: 0 auto;
    7. .inner {
    8. position: absolute;
    9. left: 0;
    10. right: 0;
    11. top: 0;
    12. bottom: 0;
    13. margin: auto;
    14. background: pink;
    15. height: 100px;
    16. width: 100px;
    17. }
    18. }


编译后css:

  1. #wrap {
  2. position: relative;
  3. width: 300px;
  4. height: 400px;
  5. border: 1px solid;
  6. margin: 0 auto;
  7. }
  8. #wrap .inner {
  9. position: absolute;
  10. left: 0;
  11. right: 0;
  12. top: 0;
  13. bottom: 0;
  14. margin: auto;
  15. background: pink;
  16. height: 100px;
  17. width: 100px;
  18. }
  1. &嵌套
    错误 的绑定hover事件

    1. // 错误的绑定hover事件
    2. #wrap {
    3. .inner {
    4. background: pink;
    5. :hover {
    6. background: deeppink;
    7. }
    8. }
    9. }


编译后hover和inner中间带了空格

  1. #wrap .inner {
  2. background: pink;
  3. }
  4. /* .inner和:hover之间错误的多了个空格 */
  5. #wrap .inner :hover {
  6. background: deeppink;
  7. }


正确 的绑定hover事件

  1. // 正确的绑定hover事件
  2. #wrap {
  3. .inner {
  4. background: pink;
  5. /* 加&时,编译后的层级不会再有空格 */
  6. &:hover {
  7. background: deeppink;
  8. }
  9. }
  10. }


编译后的css文件

  1. #wrap .inner {
  2. background: pink;
  3. }
  4. #wrap .inner:hover {
  5. background: deeppink;
  6. }

混合

混合就是将一个规则集引入到另一个规则集

  1. 普通混合 ```less // 使用点新建混合 .innerCommon{ position: absolute; left: 0; right: 0; top: 0; bottom: 0; margin: auto; background: pink; height: 100px; width: 100px; }

wrap {

  1. position: relative;
  2. width: 300px;
  3. height: 400px;
  4. border: 1px solid;
  5. margin: 0 auto;
  6. .inner1 {
  7. /* 引入.innerCommon规则样式 */
  8. .innerCommon;
  9. }
  10. .inner2 {
  11. /* 引入.innerCommon规则样式 */
  12. .innerCommon;
  13. }

}

  1. 2.
  2. 不带输出的混合
  3. <br />普通混合时,.innerCommon规则也会输出到css文件。加括号之后便不会输出到css文件
  4. ```less
  5. // 带括号之后,.innerCommon不会被编译到.css文件
  6. .innerCommon(){
  7. position: absolute;
  8. left: 0;
  9. right: 0;
  10. top: 0;
  11. bottom: 0;
  12. margin: auto;
  13. background: pink;
  14. height: 100px;
  15. width: 100px;
  16. }
  17. #wrap {
  18. position: relative;
  19. width: 300px;
  20. height: 400px;
  21. border: 1px solid;
  22. margin: 0 auto;
  23. .inner1 {
  24. /* 引入.innerCommon规则样式 */
  25. .innerCommon;
  26. }
  27. .inner2 {
  28. /* 引入.innerCommon规则样式 */
  29. .innerCommon;
  30. }
  31. }
  1. 带参数的混合 ```less // 给innerCommon混合定义@w, @h两个参数 .innerCommon(@w, @h){ position: absolute; left: 0; right: 0; top: 0; bottom: 0; margin: auto; background: pink; height: @w; width: @h; }

wrap {

  1. position: relative;
  2. width: 300px;
  3. height: 400px;
  4. border: 1px solid;
  5. margin: 0 auto;
  6. .inner1 {
  7. // 传入长宽参数,引入innerCommon混合
  8. .innerCommon(100px, 100px);
  9. }
  10. .inner2 {
  11. // 传入长宽参数,引入innerCommon混合
  12. .innerCommon(100px, 100px);
  13. }

}

  1. 4.
  2. 参数带默认值的混合
  3. ```less
  4. // 使用冒号为变量设置默认值
  5. .innerCommon(@w:100px, @h:100px, @c:pink){
  6. position: absolute;
  7. left: 0;
  8. right: 0;
  9. top: 0;
  10. bottom: 0;
  11. margin: auto;
  12. background: @c;
  13. height: @w;
  14. width: @h;
  15. }
  16. #wrap {
  17. position: relative;
  18. width: 300px;
  19. height: 400px;
  20. border: 1px solid;
  21. margin: 0 auto;
  22. .inner1 {
  23. // 带默认值的混合调用时,可以从前向后省略参数值
  24. .innerCommon(100px, 100px);
  25. }
  26. .inner2 {
  27. // 可以指定设置参数@c的值为deeppink
  28. .innerCommon(@c:deeppink);
  29. }
  30. }
  1. 匹配模式

    类似于重载


示例:绘制三角形库triangle.less

  1. // 调用任意.triangle(变量值, @w, @c)时,都会调用.triangle(@_, @w, @c)
  2. .triangle(@_, @w, @c) {
  3. width: 0px;
  4. height: 0px;
  5. overflow: hidden;
  6. }
  7. // 使用.triangle(L,变量值,变量值)调用该混合
  8. .triangle(L, @w, @c) {
  9. border-width: @w;
  10. border-style: dashed dashed dashed solid;
  11. border-color: transparent transparent transparent @c;
  12. }
  13. .triangle(R, @w, @c) {
  14. border-width: @w;
  15. border-style: dashed solid dashed dashed;
  16. border-color: transparent @c transparent transparent;
  17. }
  18. .triangle(T, @w, @c) {
  19. border-width: @w;
  20. border-style: dashed dashed solid dashed;
  21. border-color: transparent transparent @c transparent;
  22. }
  23. .triangle(B, @w, @c) {
  24. border-width: @w;
  25. border-style: solid dashed dashed dashed;
  26. border-color: @c transparent transparent transparent;
  27. }


在需要绘制三角形的less中引入该less:

  1. @import "./triangle.less";
  2. #wrap .sjx {
  3. // 调用.triangle(B, @w, @c)混合,会自动先调用.triangle(@_, @w, @c)混合
  4. .triangle(B, 100px, orange)
  5. }
  1. @arguments的使用 ```less .borderStyle(@w, @style, @c) { // 使用@arguments获取所有传入的参数 border: @arguments; }

wrap {

  1. .inner {
  2. .borderStyle(1px, solid, black);
  3. }

}

  1. <br />编译后css:
  2. ```css
  3. #wrap .inner {
  4. border: 1px solid black;
  5. }

计算

计算中只需一个参数带单位

  1. #wrap {
  2. width: (100 + 100px);
  3. }

编译后的css:

  1. #wrap {
  2. width: 200px;
  3. }

继承

  1. 普通继承
    编写被继承less:extends.less
    1. // 被继承的混合不能带参数,不能加括号
    2. .publicStyle {
    3. position: absolute;
    4. left: 0;
    5. right: 0;
    6. bottom: 0;
    7. top: 0;
    8. margin: auto;
    9. }


在另一个less文件中引入extends.less,并继承.publicStyle

  1. @import "./extends.less";
  2. * {
  3. margin: 0;
  4. padding: 0;
  5. }
  6. #wrap {
  7. position: relative;
  8. width: 300px;
  9. height: 300px;
  10. border: 1px solid;
  11. margin: 0 auto;
  12. // 使用extend函数进行继承
  13. .inner:extend(.publicStyle) {
  14. &:nth-child(1){
  15. width: 100px;
  16. height: 100px;
  17. background: red;
  18. }
  19. &:nth-child(2) {
  20. width: 50px;
  21. height: 50px;
  22. background: pink;
  23. }
  24. }
  25. }


也可以使用&进行继承

  1. @import "./extends.less";
  2. * {
  3. margin: 0;
  4. padding: 0;
  5. }
  6. #wrap {
  7. position: relative;
  8. width: 300px;
  9. height: 300px;
  10. border: 1px solid;
  11. margin: 0 auto;
  12. // 使用extend函数进行继承
  13. .inner{
  14. &:extend(.publicStyle);
  15. &:nth-child(1){
  16. width: 100px;
  17. height: 100px;
  18. background: red;
  19. }
  20. &:nth-child(2) {
  21. width: 50px;
  22. height: 50px;
  23. background: pink;
  24. }
  25. }
  26. }
  1. 继承混合,并继承混合的绑定事件 ```less .publicStyle { position: absolute; left: 0; right: 0; bottom: 0; top: 0; margin: auto; }

.publicStyle:hover { background: black; }

  1. <br />使用extend(publicStyleall)继承.publicStyle并继承其绑定的事件
  2. ```less
  3. #wrap {
  4. .inner {
  5. &:extend(.publicStyle all);
  6. }