还是通过之前的老套路来引出 less 中混合的可变参数,首先来看如下代码
div {
width: 200px;
height: 200px;
background: red;
transition: all 4s linear 0s;
}
div:hover {
width: 400px;
height: 400px;
background: blue;
}
<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
改写完毕之后其实形参的名称就没有任何的意义,可以使用 ...
来代替,那么三个点代表着什么含义呢,代表着可以传递零个或者多个形参参数
.animate(...) {
transition: @arguments;
}
div {
width: 200px;
height: 200px;
background: red;
.animate(all, 4s, linear, 0s);
}
div:hover {
width: 400px;
height: 400px;
background: blue;
}
而 transition 至少需要传递两个参数,就是哪一个属性需要执行动画,执行的这个动画的时长是多少,这个时候时候怎么才能告诉调用者至少要传递两个参数呢,接下来就开始改造
如果没有传入对应参数的个数在编译层面就会过不去,如下图所示
那么如果传递多个呢如下图,我传递了两个在编译的时候就已经成功了,传递一个会失败,我就不演示了
- 如果形参列表中使用了
...
,那么...
必须写在形参列表最后- 记住如上这一点即可