less 函数_Less 实践指南(实用干货总结)

2023-05-16

使用less一段时间了,之前一直用sass,有时间把项目中用到的方法写下来,好记性不如烂笔头。

1. 变量

值是变量
选择器是变量
属性是变量
图片url是变量

1)值是变量

签名为 @变量名:值。一般我们会把全局用的单独封装一个文件,例如全局换肤颜色,公共组件的css样式。使用时候直接使用 签名。

@toolbar-hover: #F7F5FF;
@toolbar-active: #E6E4F1;
@toolbar-hover-two: #F1F0F7;

.container {
  cursor: pointer;
  &:hover {
    background-color: @toolbar-hover;
  }
  &:active {
    background-color: @toolbar-active;
  }
}

2)selector是变量

选择器是变量时候 值不要加引号。例如 @prefixClass:fontcolor,@{prefixClass}这个整体可以是 .fontcolor 也可以是 #fontcolor,如果加类选择器或者id选择器前缀,调用时候就直接是@{prefixClass}。大括号括起来选择器是变量。

.status(@name;@prefixClass) {
  @names: @prefixClass;
  transition: border-color 0.3s;
  &:hover {
    .@{prefixClass} {
      .bg-img(@name, @endHover);
    }
  }
}
 .status('color',fontcolor);

3)属性是变量

属性是变量,变量必须用大括号括起来。

@width: width;
@height: height;
.dropListTypeGlobalStyle(@cardTwo,@itemWidth,@itemHeight,@menuWidth,@menuHeight) {
  .ant-menu-vertical .ant-menu-item {
    @{width}: @itemWidth;
    @{height}: @itemHeight;
    .dropCardTwoSingle(@cardTwo);
    .dropCardItemCommon();
  }
}
.dropListTypeGlobalStyle(false,73px,88px,290px,327px)

4)img url为变量

变量名 必须使用大括号包裹 ,路径必须用引号。

@iconUrl: 'assets/png/toolbarIcon/';
@endNormal: '-normal.png';
@endHover: '-hover.png';

.bg-img(@name, @endname) {
  transition: background-image .3s;
  background: url('@{iconUrl}@{name}@{endname}');

  &.hover,&.active {
    background: url('@{iconUrl}@{name}-hover.png');
    background-size: contain;
  }
}

2. 嵌套

&符号
媒体查询

1)&符号

&代表选择器名称

.custom {
    cursor: pointer;
    color: #000;
    opacity: 0.6;
    &:hover {
      color: @primary-color;
    }
  }

2)media

替代:@media screen and (max-width:1280px){

  @media screen{
    @media (max-width:1280px){
       .container {
         left: calc(50% - 450px);
       }
    }
  }

3. 方法函数

无参数时,调用可以加括号也可以不加。

.iconActive {
  filter: contrast(0) brightness(2);
  opacity: 1;
}
#wrap{
  .card;//等价于.card();
}

有参数时,可以设置参数默认值,也可以不设置。@arguments 犹如 JS 中 @arguments 指代的是 全部参数。传的参数中 必须带着单位。

.status(@name;@prefixClass) {
  @names: @prefixClass;
  transition: border-color 0.3s;
  &:hover {
    .@{prefixClass} {
      .bg-img(@name, @endHover);
    }
  }
}
 .status('color',fontcolor);

.border(@a:10px,@b:50px,@c:30px,@color:#000){
    border:solid 1px @color;
    box-shadow: @arguments;//指代的是 全部参数
}
#main{
    .border(0px,5px,30px,red);//必须带着单位
}
#wrap{
    .border(0px);
}

参数不定时候,使用 ... ,ES6 的扩展运算符。

.shadowOne(...){
    box-shadow: @arguments;
}
.shadowTwo(@a,...){
    box-shadow: @arguments;
}
#shadow{
    .shadowOne(1px,4px,30px,red);
    .shadowTwo(1px,4px,30px,red);
}

有条件判断时候,无if else,有when and;

#card{
    // and 运算符 ,相当于 与运算 &&,必须条件全部符合才会执行
    .border(@width,@color,@style) when (@width>100px) and(@color=#999){
        border:@style @color @width;
    }

    // not 运算符,相当于 非运算 !,条件为 不符合才会执行
    .background(@color) when not (@color>=#222){
        background:@color;
    }

    // , 逗号分隔符:相当于 或运算 ||,只要有一个符合条件就会执行
    .font(@size:20px) when (@size>50px) , (@size<100px){
        font-size: @size;
    }
}
#main{
    #card>.border(200px,#999,solid);
    #card .background(#111);
    #card > .font(40px);
}

需要循环方法调用时候,可以使用each。

@iconUrl: 'assets/svg/toolbar/';
@buttons: LineHeight, Orderlist;

.state(@icon, @state) {
  background-image: url("@{iconUrl}@{icon}_@{state}.svg");
}

each(@buttons, {
  .@{value} {
    &:hover div div {
      .state(@value, "Hover");
    }
  }
})

4. 继承

extend

extend可以继承声明的所有样式

.transition{
    transition: all .3s ease-out;
}
#wrap{
    &:extend(.transition);
}

5. 导入文件

reference

引入但是不编译,使用@import (reference)导入外部文件,但不会添加 把导入的文件 编译到最终输出中,只引用。

@import (reference) "bootstrap.less"; 

#wrap:extend(.navbar all){}
once

@import语句的默认行为。这表明相同的文件只会被导入一次,而随后的导入文件的重复代码都不会解析。

@import (once) "common.less";
@import (once) "common.less"; // this statement will be ignored
multiple

使用@import (multiple)允许导入多个同名文件。

@import (multiple) "common.less";
@import (multiple) "common.less";

6. 注释

可以使用css中的注释:/**/
也可以使用 // 注释 (// 编译的时候会自动过滤掉)

​两者的区别:

/**/ 中的注释在编译的是会被编译出来的,会在编译生成的CSS中会出现。

// 是不会被编译的,编译时自动过滤,在编译生成的CSS中没有。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

less 函数_Less 实践指南(实用干货总结) 的相关文章

随机推荐