& when
не if
(они обычно говорят так просто для краткости). & {...}
по-прежнему является регулярным набором правил с его собственной областью, а переменные, определенные внутри набора правил, не отображаются во внешних областях.
Чтобы добиться того, что вам нужно, переписать это с помощью условных Примеси (внутренности подмешать в (включая переменный) фактически расширяется в сферу вызывающего абонента.):
.btn-svg-offset(@height, @padding) {
@paddings-n: floor(@height/@padding);
.-() {@multiplier: 2} .-;
.-() when (@padding < @height) {
@multiplier: 1;
}
@btn-svg-offset: @padding + ((@height/@multiplier) * @paddings-n);
}
Обратите внимание, что вы можете поместить то же условие на .btn-svg-offset
mixin (так что в реальном коде он не обязательно должен быть таким подробным, как в моем примере ... Точный код может меняться, хотя в зависимости от использования mixin и других его внутренних компонентов).
(Upd.) Например, следующий код (некоторые вариации возможны также) было бы эквивалентно:
.btn-svg-offset(@height, @padding, @multiplier: 2) {
@paddings-n: floor(@height/@padding);
@btn-svg-offset: @padding + @height/@multiplier * @paddings-n;
}
.btn-svg-offset(@height, @padding) when (@padding < @height) {
.btn-svg-offset(@height, @padding, 1);
}
Эй человек, ТНХ очень приятно это .-! Проблема в том, что часть (@padding <@height) {все еще не работает :(Любые идеи, почему? Первое объявление работает, хотя) – thematrixhasyou
P.S. МЕНЬШЕ было бы реально, если бы к настоящему времени было бы очень удобно)) Я знаю, что SASS есть, но я его ненавижу) – thematrixhasyou
Я думаю, что оба решения не будут работать, потому что '@multiplier: 2' утечка в область вызывающего абонента до' когда 'был вызван, а затем« Переменная, определенная непосредственно в области вызовов, не может быть переопределена ». (при использовании mixins в качестве функций). Таким образом, для решения этой проблемы вам понадобятся два 'битна-svg-offset' mixins с разными настройками. Я не уверен, что это какая-то ошибка. @ seven-phase-max говорит: '& {...} по-прежнему является регулярным набором правил. Но я ожидаю, что '.mixin {& when() {}}' должен действовать как '.mixin {}', а затем '.mixin when() {}' –