我想写一个LESS的mixin,使用字符串的一部分来形成类名。我希望能够使用replace()
为变量提供值,然后在规则中使用该变量。下面是我编写的测试以验证它是否可行:
.foo(@xyz) {
@pfx: replace(@xyz, "(.).*", "$1");
.@{pfx}-foo { margin: 0; }
}
.foo(abcdefghijklmnop);
当我使用 lessc (1.7.4) (编辑 - 同样适用于 2.1.0) 运行它时,它 有点 有效,生成了这个:
.aaa-foo {
margin: 0;
}
因此,
replace()
函数正确地从我传入的字符串中取出第一个字符(“a”),但是它并没有....a-foo
它给了我
.aaa-foo
我查看了replace()
函数的源代码,发现它非常简单,所以我完全不明白发生了什么。(我已经使用正则表达式"^(.).*$"
尝试过,但结果相同。)
我稍微扩展了一下测试:
.foo(@xyz) {
@pfx: replace(@xyz, "(.).*", "$1");
.@{pfx}-foo { margin: 0; content: "@{pfx}"; }
}
.foo(abcdefghijklmnop);
这将使我获得:
.aaa-foo {
margin: 0;
content: "a";
}
这意味着正则表达式运行良好。
.foo(zebra)
,那么它会给我.zzz-foo
。 - Pointy.a-foo
- 看起来 LESS 内部已经给变量赋了正确的值,但当它在特定的上下文中使用变量(在选择器中创建类名)时,它会重复该值。这很奇怪。 - Pointy