为什么我从WinLess收到此错误消息?

时间:2016-02-22 08:59:31

标签: compiler-errors less

我正在努力学习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);

编译器似乎过早地寻找),因为它肯定存在,但它表现得好像不是。我该如何解决这个问题?

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中提供的代码应该可以正常编译,而不会在最新的编译器中出现任何错误。

(添加我的评论和演示作为答案,以便不回答问题)