这绝对是可能的,但我不得不稍微修改一下较少的源代码(我认为这很好,考虑到它真的不应该这样做:))
我想大家都想先看一个demo,点这里:http:
//jsfiddle.net/kritzikratzi/BRJXU/1/
(script-window只包含修改过的less.js-source,感兴趣的都在html窗口中)
kk,我先解释一下我的补丁,用法在最后。
补丁由三部分组成
添加实用功能
less.Overrides = {};
less.Override = function( variableName, value ){
if( !value ){
delete less.Overrides[variableName];
}
else{
less.Overrides[variableName] = value;
}
less.refreshStyles();
};
将属性保存到一个对象中,并告诉更少更新它的样式。
修改解析函数
function parse(str, callback ){
...
var overrides = "\n\n";
for( var key in less.Overrides ){
overrides += key + ": " + less.Overrides[key] + ";\n";
}
str += overrides;
我们在这里所做的就是序列化被覆盖的属性并将它们添加到每个被解析的文件的末尾。
修改 loadStyles 函数
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 );
}
....
默认情况下,less 将替换类型参数 from <style type='text/less'>
totype='text/css'
并忘记了 less-source。为了防止这种情况,原始的 less-source 被存储和加载。
用法和结论
<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>
这在我的电脑上工作得很好,我不得不承认它看起来很整洁。我还没有测试过外部较少的文件,如果它们不起作用,应该很容易修复。
我仍然认为在生产环境中使用它不是最好的主意(出于其他人已经提到的原因)。