2014-10-28 5 views
1

Я использую dotless для анализа LessCss во время выполнения. Это в основном успешно, но у меня есть один сценарий, когда он не работает так, как предполагалось.Компилятор DotLess LessCss отличается от компилятора WebEssentials LessCss

Учитывая следующие LessCss:

@tileWidth: 50px; 
@tileMarginX: 5px; 
@gridWidth: 2; 

// recursive less to generate all x positions down to 1 
.position-x(@maxIndex) when (@maxIndex > 0) { 
    [data-col="@{maxIndex}"] { 
     left: ((@maxIndex - 1) * @tileWidth) + (@tileMarginX * ((@maxIndex * 2) - 1)); 
    } 

    .position-x(@maxIndex - 1); 
} 

.position-x(@gridWidth); 

WebEssentials 2013 Update 3 будет компилировать:

[data-col="2"] { 
    left: 65px; 
} 
[data-col="1"] { 
    left: 5px; 
} 

LessEngine.TransformToCss будет выход:

[data-col="@{maxIndex}"] { 
    left: 65px 
}  
[data-col="@{maxIndex}"] { 
    left: 5px 
} 

Является ли этот синтаксис не поддерживается в DotLess?
Как я могу изменить код Less для получения ожидаемого результата?

+2

Предполагая, что 'dotless' просто не поддерживает интерполяции в селекторы атрибутов : что-то вроде [этого] (https://gist.github.com/seven-phases-max/6d1bc5483f43de3088b8#file-26615585 -less) должен сделать трюк, я думаю. –

+1

также см .: https://github.com/dotless/dotless/issues/395 –

+1

@ seven-phase-max Это идеальное решение. Я могу подтвердить, что он работает. Поместите свой комментарий в качестве ответа, чтобы я мог повышать и отмечать как правильные. –

ответ

2

По https://github.com/dotless/dotless/issues/395dotless просто не поддерживает интерполяции в селекторы атрибутов, так что вам нужно просто «скрыть» атрибут в переменной, например:

@tileWidth: 50px; 
@tileMarginX: 5px; 
@gridWidth: 2; 

.position-x(@n) when (@n > 0) { 
    @attr: ~'[data-col="@{n}"]'; 
    @{attr} { 
     left: (@n - 1) * @tileWidth + (2 * @n - 1) * @tileMarginX; 
    } 

    .position-x(@n - 1); 
} 

.position-x(@gridWidth); 
Смежные вопросы