2015-08-25 4 views
2

Допустим, у меня есть следующие:Условно инкапсулировать правила

@import 'hello.less' 

на основе значения переменной, я хочу, чтобы это гнездо внутри другого класса. Ниже то, что я хочу сделать, в псевдокоде:

if(@someVar = true): 
    .someClass { 
    @import 'hello.less' 
    } 
else: 
    @import 'hello.less' 

Я думаю, я мог бы использовать подмешать охранник, но я не знаю, как обращаться с «еще» случаем:

.someClass when (@someVar = true) { 
    @import 'hello.less' 
} 

// Else? 

ответ

3

Использование not и & (&, ничего не делает, если его родитель глобальный масштаб (e.g.)):

@some-var: true; 

.some-class when (@some-var) { 
    @import (multiple) "hello"; 
} 

& when not(@some-var) { 
    @import (multiple) "hello"; 
} 

Обратите внимание, что multiple опция импорта требуется в данном случае, так как импорт, так всегда оцениваются и охранники контролируют только, если содержимое появляется на выходе или нет.

---

Хотя вообще я удивляюсь, почему вы должны держать код для различных проектов, в том же файле и контролировать его компиляцию косвенно через переменные. Вместо этого я хотел бы предложить, чтобы создать файл, просто «привет» из пространства имён:

.some-class {@import "hello";} 

и импортировать его безоговорочно в проекте вы хотите его таким образом.

+0

Существует одна база данных проекта/кода, которая компилируется на несколько разные выходы. Это одно из незначительных различий между ними. – mostruash

+0

@mostruash: Этот ответ на мой взгляд лучше, чем ваш собственный (без обид). – Harry

+0

@ Харри, это действительно так. Но у меня есть вопрос: если я поставлю оператор '@ import' в mixin и заменим его соответственно в вашем примере, мне все еще нужно' multiple'? – mostruash

1

Мое текущее решение заключается в следующем:

@someVar: true; 

.someClass when (@someVar = true) { 
    .main(false); 
} 

.main(@someVar); 

.main(@x) when not (@x) { 
    @import 'hello.less' 
} 

Я пометить это как ответ, если кто-то не имеет лучший друг.

+0

Отнюдь не неправильный ответ, но, как указано в другом месте, я думаю, что другой ответ лучше. Все еще голосуйте за усилия :) Довольно много людей задают вопрос и просто ждут в отличие от вас. – Harry

Смежные вопросы