it is definitely possible, but i had to modify the less sourcecode a bit
(which i think is fine, considering it's really not meant to be done :) )
i suppose everyone wants to see a demo first, click here:
http://jsfiddle.net/kritzikratzi/BRJXU/1/
(script-window contains only the modified less.js-source, everything of interest is in the html window)
kk, i'll first explain my patch, usage is at the end.
patch consists of three parts
add a utility function
less.Overrides = {};
less.Override = function( variableName, value ){
if( !value ){
delete less.Overrides[variableName];
}
else{
less.Overrides[variableName] = value;
}
less.refreshStyles();
};
save the property into an object and tell less to update it's styles.
modify the parse function
function parse(str, callback ){
...
var overrides = "
";
for( var key in less.Overrides ){
overrides += key + ": " + less.Overrides[key] + ";
";
}
str += overrides;
all we do here is serialize the overridden properties and add them to the end of every file that is parsed.
modify the loadStyles function
if (styles[i].type.match(typePattern) || styles[i].hasAttribute( "lessText" )) {
var lessText;
if( styles[i].hasAttribute( "lessText" ) ){
lessText = styles[i].getAttribute( "lessText" );
}
else{
lessText = styles[i].innerHTML || '';
styles[i].setAttribute( "lessText", lessText );
}
....
by default less will replace the type parameter from <style type='text/less'>
to type='text/css'
and forgot about the less-source. to prevent this the original less-source is stored and loaded.
usage and conclusion
<style type="text/less">
@color: green;
#header{ color: @color; }
</style>
<div id="header">i'm the header!</div>
<a href="#" onclick="less.Override('@color', 'red');">make it red</a>
this works just fine on my computer and i have to admit it looks very neat.
i haven't tested external less files, if they don't work it should be easy to fix.
i still think it's not the best idea to use this in a production environment (for reasons mentioned by others already).
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…