我正在努力学习Less并且我正在做一个练习,我必须在Less中编写一个相当复杂的代码。我正在使用工作簿,据我所知,我已经完全按照我的要求编写了代码,但我一直收到错误:
解析错误:缺少关闭)
以下是代码,此错误所关注的部分以两个*突出显示:
@waarde: -((38*@index)-38);
background-position: ~"@{waarde}px" 0;
.menuspan (@bgc, @col, @tshad) {
background-color: @@bgc;
color: @@col;
text-shadow: 0 0 5px @@tshad;
}
//m_item1
@bgcolor_1: #7da315;
@color_1: #3d4f0c;
@tshadow_1: #99bf31;
//m_item2
@bgcolor_2: #1e8bb4;
@color_2: #223a44;
@tshadow_2: #44a8d0;
//m_item3
@bgcolor_3: #c86c1f;
@color_3: #5a3517;
@tshadow_3: #d28344;
//m_item4
@bgcolor_4: #d0a525;
@color_4: #604e18;
@tshadow_4: #d8b54b;
//m_item5
@bgcolor_5: #af1e83;
@color_5: #460f35;
@tshadow_5: #d8b54b;
.lusGuardedMixin (@index) when (@index < 0) {
@waarde: -((38*@index)-38);
**(~".m_item@{index}")** {
background-position: ~"@{waarde}px" 0px;
&:hover {
background-position: ~"@{waarde}px" -39px;
}
& span {
.menuspan(~"bgcolor_@{index}", ~"color_@{index}", ~"tshadow_@{index}")
}
}
.lusGuardedMixin(@index + 1);
}
.lusGuardedMixin (6) {}
.lusGuardedMixin (1);
编译器似乎过早地寻找),因为它肯定存在,但它表现得好像不是。我该如何解决这个问题?
答案 0 :(得分:2)
正如评论中所讨论的,这不是WinLess或Less本身的问题。问题在于您用于编译的代码。它可能来自一个过时的源代码,它仍然使用旧的语法(几年前已被弃用),因此编译错误。
以下是需要纠正的错误:
代码中的前两行会产生编译错误,因为@index
变量仅在mixin循环中可用,而不在其外部。这根本不是必需的,可能只是一个复制粘贴错误。
@waarde: -((38*@index)-38);
background-position: ~"@{waarde}px" 0;
接下来,使用的选择器插值语法是过时/弃用的语法。在最新版本的编译器中根本不需要转义,括号和引号。而不是这个,
(~".m_item@{index}"){...}
就在下面就足够了:
.m_item@{index} {...}
最后,循环本身有一个错误,因为警卫正在检查@index
是否小于0但是mixin的输入值都大于0,因此mixin永远不会被调用。此外,最后两个mixin调用不是必需的,可以将它们更改为.lusGuardedMixin (5);
。
进行上述所有更改后,this demo中提供的代码应该可以正常编译,而不会在最新的编译器中出现任何错误。
(添加我的评论和演示作为答案,以便不回答问题)