2016-09-27 2 views
1

Это мой цикл:МЕНЬШЕ ошибка Loop при использовании Grunt + Bootstrap 3

@loop-start: 1; 
@loop-end: 20; 
.loop(@n, @i) when (@n =< @loop-end) { 
    .testi-square:nth-of-type(@{n}) {order: (@i);} 
    .testi-square:nth-of-type(@{n + 1}) {order: (@i + 1);} 
    .testi-square:nth-of-type(@{n + 2}) {order: (@i + 2);} 

    .loop((@n + 3), (@i + 6)); // next iteration 
} 
.loop(@loop-start, @loop-start); // launch the loop 

И это ошибка я получаю:

Running "less:compileThemeWeb" (less) task 
ParseError: Missing closing ')' in less/theme-web.less on line 3630, column 29: 
3629 .testi-square:nth-of-type(@{n}) {order: (@i);} 
3630 .testi-square:nth-of-type(@{n + 1}) {order: (@i + 1);} 
3631 .testi-square:nth-of-type(@{n + 2}) {order: (@i + 2);} 
Warning: Error compiling less/theme-web.less Use --force to continue. 

Aborted due to warnings. 

Я использую последний Bootstrap, чтобы создать свою тему , Я использую это в течение последних 6 месяцев без каких-либо проблем, я сомневаюсь, что версия LESS слишком стар. Не уверен, как решить проблему, похоже на синтаксис, но не уверен. Смотрел на http://lesscss.org/features/#loops-feature весь день и чистил интернет, но не играл в кости.

+0

'nth-of-type (@ {n + 1})' - это неверно. Меньше кода. Вы не можете использовать выражения или что-либо еще (вызовы функций и т. Д. И т. Д.) С интерполяцией селектора, только чистые переменные, например. '@ {n}' действительны, '@ {n + 1}' нет. –

+0

Извините @ семь фаз-макс. Отправленный ответ, прежде чем увидеть свой комментарий. Думайте, что вы должны были разместить свой комментарий также в качестве ответа. – Harry

ответ

3

Ошибка из следующих строк:

.testi-square:nth-of-type(@{n + 1}) {order: (@i + 1);} 
.testi-square:nth-of-type(@{n + 2}) {order: (@i + 2);} 

Когда компилятор встречает @{n + 1}, он будет искать переменную с именем n + 1. У вас нет таких переменных с именем n + 1 (и это также недопустимый синтаксис). Таким образом, это приведет к ошибке компиляции. Исправление было бы использовать что-то вроде этого:

@loop-start: 1; 
@loop-end: 20; 
.loop(@n, @i) when (@n =< @loop-end) { 
    .testi-square:nth-of-type(@{n}) {order: (@i);} 
    @temp: @n + 1; 
    .testi-square:nth-of-type(@{temp}) {order: (@i + 1);} 
    @temp2: @n + 2; 
    .testi-square:nth-of-type(@{temp2}) {order: (@i + 2);} 

    .loop((@n + 3), (@i + 6)); // next iteration 
} 
.loop(@loop-start, @loop-start); // launch the loop 

Как заявил семь фаз-макс в своем комментарии, мы не можем использовать выражения, вызовы функций и т.д. в интерполяции селектора. Разрешены только переменные.

+1

ах, который работает! Спасибо, полезное объяснение –

+0

Добро пожаловать @AlexPaxton. Рад был помочь :) – Harry