I am trying to create a mixin that dynamically defines variables in LESS CSS, by actually assigning them a composite name.
The simplified use-case (not the real one):
.define(@var){
@foo{var}: 0;
}
Then one would call the mixin as such:
.define('Bar'){
@fooBar: 0;
}
Since this kind of string interpolation is possible while using selectors names, I was wondering if the same would be possible for variable names; so far, I have had no luck with various syntaxes I tried (other than the above, I tried escaping, quoting, using the ~
prefix and so on).
Edit
I just tried one more thing, and I feel I might be close; but I am experiencing an oddity of the LESS syntax. If I write this:
.define(@var){
#namespace {
@foo: @var;
}
}
And then call it like so:
.define(0)
I can then use @foo
in the usual namespaced fashion:
.test {
#namespace;
property: @foo; /* returns 0 */
}
However, the same doesn't apply in the case of a string-interpolated selector:
.define(@var, @ns){
#@{ns} {
@foo: @var;
}
}
.define(0, namespace);
.test {
#namespace;
property: @foo;
}
The above code gives me the following error:
Name error: #namespace is undefined
However, the string interpolation was successful and valid. As a matter of fact, if I take away the .test
part and modify the above to output a test property, I can see that the CSS is parsed correctly. I mean:
.define(@var, @ns){
#@{ns} {
@foo: @var;
prop: @foo;
}
}
.define(0, namespace);
Outputs the following CSS:
#namespace {
prop: 0;
}