Javascript 在较短时间内更改可见性时转换变量
所以我正在努力让第二课开始。顺便说一句,我尝试这样做的原因是使用此代码段来使用阴影:Javascript 在较短时间内更改可见性时转换变量,javascript,css,less,Javascript,Css,Less,所以我正在努力让第二课开始。顺便说一句,我尝试这样做的原因是使用此代码段来使用阴影: .box-shadow(@shadowA, @shadowB:X, ...){ @props: ~`"@{arguments}".replace(/[\[\]]|\,\sX/g, '')`; -webkit-box-shadow: @props; -moz-box-shadow: @props; -o-box-shadow: @props;
.box-shadow(@shadowA, @shadowB:X, ...){
@props: ~`"@{arguments}".replace(/[\[\]]|\,\sX/g, '')`;
-webkit-box-shadow: @props;
-moz-box-shadow: @props;
-o-box-shadow: @props;
box-shadow: @props;
}
但上面的这段代码只是解释了我为什么要发布这篇文章
问题是为什么.class
和.class2
不一样
你可以用
顺便说一句:
.class {
background: a, b, c, d;
}
.class2 {
background: a b c d;
}
附加问题:LESS对可用内置函数的定义中没有列出替换-那么真正提供了什么函数集?首先,更好的方法是什么?
您不再需要借助内联javascript来获取道具。顺便说一下,Javascript就是replace
函数的功能。。。它不是内置的LESS函数,但LESS可以访问javascript环境,就像您提供的代码使用backtick(`
)标记所做的那样
这样做,假设您需要两个特定命名的变量,然后是一个最终变量来捕获所有其他列表项。注意分号的使用调用.f1
mixin作为参数分隔符时,使用code>。这将导致最终的@props
逗号分隔列表被解释为:
.f1(@t1, @t2:X, @props){
background: @t1, @t2, @props;
}
.class{
.f1(a; b; c, d;);
}
如果不需要单独调用前两个变量(或不希望设置默认值),则可以这样做:
.f1(@props){
background: @props;
}
.class{
.f1(a, b, c, d;);
}
第二,为什么会有差异
我相信,这两个功能不一样的原因在于:
.f2helper(@arguments);
最后将一系列参数作为单个参数传递给.f2helper
,这样就不会在单独的参数之间插入逗号,而.f1
mixin正在处理作为多个参数传递给它的多个参数,并在它们之间插入逗号。变量的值(例如@arguments
)从未解释为mixin参数的列表,它始终作为一个参数传递。那么,如果您为每个mixin打印出@参数的值,就更容易看到发生了什么:
.class {
.f1(a, b, c, d);
}
.f1(@t1, @t2: X, ...) {
args: @arguments; // here you have four parameters, js: [a, b, c, d]
}
.class2 {
.f2(a, b, c, d);
}
.f2(@t1, @t2: X, ...) {
.f2helper(@arguments);
}
.f2helper(@t1, @t2: X, ...) {
args: @arguments; // here you have two parameters, js: [a b c d, X]
}
结果:
.class {
args: a b c d;
}
.class2 {
args: a b c d X;
}
test {
box-shadow: a, b, c, d;
}
也就是说,您的正则表达式不能在.f2
中正常工作
正如@ScottS所提到的,这样的黑客行为不再有意义,因为你可以:
.box-shadow(@value) {
box-shadow: @value;
}
test {
.box-shadow(a, b, c, d;); // notice ';' at the end of parameters
}
结果:
.class {
args: a b c d;
}
.class2 {
args: a b c d X;
}
test {
box-shadow: a, b, c, d;
}
有关更多详细信息,请参阅
那么真正提供了什么样的函数集呢?
请参阅。据我所知,实际上函数replace没有列在那里,这就是问题的原因。似乎所有的基本javascript函数都是内置的LESS(它们都列在我上面链接的文档中),这些函数是LESS的本机部分,可以直接使用,例如width:pi()代码>。但是也可以通过“”语句使用任何javascript代码(包括任何javascript函数)(尽管这是值得注意的)。或者换句话说:replace
不是一个较少的函数,“@{arguments}”。replace(/[\[\]\124;\,\ sX/g,”)
在您的示例中只是简单的javascript代码(除了@{arguments}之外)
字符串替换为@参数(变量值)。