Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/css/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在较短时间内更改可见性时转换变量_Javascript_Css_Less - Fatal编程技术网

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}之外)
字符串替换为
@参数(变量值)。