还是通过之前的老套路来引出 less 中混合的可变参数,首先来看如下代码

div {
width: 200px;
height: 200px;
background: red;
transition: all 4s linear 0s;
}

div:hover {
width: 400px;
height: 400px;
background: blue;
}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>BNTang</title>
<link rel="stylesheet" href="css/index.css">
</head>
<body>
<div></div>
</body>
</html>

如上的代码当中没有使用到 less 现在来使用混合改造一下

.animate(@name, @time, @mode, @delay) {
transition: @name @time @mode @delay;
}

div {
width: 200px;
height: 200px;
background: red;
.animate(all, 4s, linear, 0s);
}

div:hover {
width: 400px;
height: 400px;
background: blue;
}

当前我们的混合的参数都需要传递,如果都需要全部传递可以使用 ​​@arguments​​​,@arguments 代表着就是你传入的所有参数,less 中的 ​​@arguments​​​ 和 ​​js​​​ 中的 ​​arguments​​ 一样,可以拿到传递进来的所有形参,这个时候你就不用足一的赋值,如下

.animate(@name, @time, @mode, @delay) {
transition: @arguments;
}

div {
width: 200px;
height: 200px;
background: red;
.animate(all, 4s, linear, 0s);
}

div:hover {
width: 400px;
height: 400px;
background: blue;
}

如上通过 ​​arguments​​​ 改写完毕之后其实形参的名称就没有任何的意义,可以使用 ​​...​​ 来代替,那么三个点代表着什么含义呢,代表着可以传递零个或者多个形参参数

less中的可变参数_css

.animate(...) {
transition: @arguments;
}

div {
width: 200px;
height: 200px;
background: red;
.animate(all, 4s, linear, 0s);
}

div:hover {
width: 400px;
height: 400px;
background: blue;
}

而 transition 至少需要传递两个参数,就是哪一个属性需要执行动画,执行的这个动画的时长是多少,这个时候时候怎么才能告诉调用者至少要传递两个参数呢,接下来就开始改造

如果没有传入对应参数的个数在编译层面就会过不去,如下图所示

less中的可变参数_4s_02

那么如果传递多个呢如下图,我传递了两个在编译的时候就已经成功了,传递一个会失败,我就不演示了

less中的可变参数_html_03


  • 如果形参列表中使用了​​...​​​,那么​​...​​ 必须写在形参列表最后
  • 记住如上这一点即可