Можно ли установить LESS-переменную на заданное значение, если оно не определено?
Я могу только найти решения для SASS.
Можно ли установить LESS-переменную на заданное значение, если оно не определено?
Я могу только найти решения для SASS.
Важное замечание: оказывается, что необходимость такого трюка очень часто оказывается проблемой XY (в результате недопонимания меньше семантики переменных). Обычно нет реальных случаев использования, в которых вы действительно этого хотите (вместо этого вы вместо этого всегда определяете значение по умолчанию (поэтому оно всегда всегда существует), которое должно быть переопределено по желанию). Поэтому, прежде чем использовать трюк ниже, убедитесь, что это не что-то еще, что вы действительно хотите.
Это довольно просто (начиная с версии 1.1.0), если вам нужно предоставить такую переменную для той же области (то есть глобальной или локальной), где она уже может быть определена:
@bar: 41; // comment/uncomment to test
.define-bar-if-not-defined() {@bar: 42}
.define-bar-if-not-defined(); // exposes a variable only if it not already in this scope
#using-global-bar {
global-bar: @bar;
}
#using-local-bar {
@bar: 43; // comment/uncomment to test
.define-bar-if-not-defined();
local-bar: @bar;
}
Однако этот метод не будет работать, если вы попытаетесь использовать его для переменных глобальной/родительской области, используемых в локальной области (и это может быть проблемой, если вам нужен общий метод, когда вы не уверены, в какой области используется исходная переменная возможно, исходит):
#using-unknown-bar-in-local-scope {
// ... some code ...
.define-bar-if-not-defined(); // won't override local @bar (if any) but always overrides global and parent scope @bar
bar: @bar;
}
В этом случае я не знаю прямого решения (без некоторых встроенных javascript-хаков, которые можно использовать в защитном выражении, например)