2013-06-23 5 views
0

Мне нужно установить переменную в МЕНЬШЕ на основании условий.Установить переменную в состоянии

@body-background-color: black; 
@post-background-color: white; 
@post-stacked-effect: true; 

.content-padding() when (@body-background-color = @post-background-color) and not (@post-stacked-effect = true){ 
    @content-padding: 0px; 
} 
.content-padding() when not (@body-background-color = @post-background-color), (@post-stacked-effect = true) { 
    @content-padding: 20px; 
} 
body { 
    .content-padding(); 
    content: "@{post-stacked-effect}"; 
    padding: @content-padding; 
    background-color: @body-background-color; 
    .post { 
     background-color: @post-background-color; 
    } 
    .some-math { 
      margin: [email protected] [email protected] @content-padding; 
    } 
} 

@ content-padding всегда 0px. Не могли бы вы помочь мне исправить это условие?

+2

Когда я вставляю код в [less2css] (http://less2css.org/), я получаю 20px. Охранники, похоже, работают так, как ожидалось. Возможно, вам стоит уточнить, какие условия вы пытаетесь настроить. – freejosh

+0

Я обнаружил, что он работает в версии JS, но не в php. Я использую компилятор PHP и имею эти проблемы. Это видно [здесь] (http://goo.gl/6k952) –

+0

Похоже, вы нашли свою проблему. Вы используете компилятор, который не разработан так же, как базовый LESS. Из того, что я могу сказать, LESS позволяет mixin устанавливать переменную в блоке декларации, чтобы вернуться к версии 1.1. Тем не менее, похоже, компилятор PHP этого не допускает. Тем не менее, вы можете использовать интерфейс PHP для проверки на PHP и установить переменную в ней до того, как код LESS будет объединен с PHP. – ScottS

ответ

1

Его ошибка в PHP Меньше компилятора. Я должен сделать обходной путь PHP.

Когда я готовлю переменные для этой компиляции, я добавил функцию, которая вычисляет заполнение в php и вводит его в LESS.

Его единственная строка в PHP.

$lessvars["content-padding"] = 
    ($lessvars["body-background-color"] == $lessvars["post-background-color"] && 
    !filter_var($lessvars["post-stacked-effect"], FILTER_VALIDATE_BOOLEAN)) 
    ? "0px" : "20px"; 
-1

Вы создаете новую область с 'when' охраняемом Mixin, которая не видна снаружи.

Так что это даже не должно работать, и, конечно же, это не ошибка.

Вместо этого вы можете создать функцию и вызвать ее из «когда».

@body-background-color: black; 
@post-background-color: white; 
@post-stacked-effect: true; 

body { 

    .padding(@padding) 
    { 
     padding: @padding; 

     .some-math 
     { 
      margin: @padding + 2em; 
     } 
    } 


    & when (@body-background-color = @post-background-color) and not (@post-stacked-effect = true){ 
     .padding(0px); 
    } 

    & when not (@body-background-color = @post-background-color), (@post-stacked-effect = true) { 
     .padding(20px); 
    } 
} 

я удалил ненужную CSS, и переименовал его, потому что форматы StackOverflow дефис имена функций причудливо.

+0

Прочтите «Меньше» [документация] (http://lesscss.org/features/#mixins-as-functions-feature). Как сказано в пред. ответы и комментарии - это всего лишь небольшая проблема, которая имеет неподходящий объем реализации переменных mixin. –

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