在Bootstrap中修改监视的LESS变量

Ra *_*ead 2 less twitter-bootstrap

我使用的bootstrap定义了更少的变量,@body-bg以此为例.我创建了一个定义的颜色主题@background.要将两者粘合在一起,我会执行以下操作:

@body-bg: @background
Run Code Online (Sandbox Code Playgroud)

现在,我希望能够在颜色主题之间切换.因此我使用较少的'watch功能进行更改@background,但似乎没有将其传播到@ body-bg并且实际上切换到bootstrap默认值.

我不想做以下任何一种情况

  • less.modifyVars({ '@body-bg': '#FFFF00' })
  • less.modifyVars({ '@background': '#FFFF00', '@body-bg': '@background' })

因为还有许多其他变量@background.

这是一些测试页面.

Problem.htm

<!DOCTYPE html>
<html>
  <head>
    <link rel="stylesheet/less" type="text/css" href="problem.less" />
    <script src="//cdnjs.cloudflare.com/ajax/libs/less.js/1.4.1/less.min.js#!watch" type="text/javascript"></script>
  </head>
  <body>
    <a href="#" onclick="less.modifyVars({ '@background': '#FF0000' })">Apple Style!</a>
    <a href="#" onclick="less.modifyVars({ '@background': '#FFFF00' })">Banana Style!</a>
  </body>
</html>
Run Code Online (Sandbox Code Playgroud)

problem.less

@background: #FF0000;
@import "bootstrap/bootstrap.less";
@body-bg: @background;
Run Code Online (Sandbox Code Playgroud)

Mar*_*jak 5

问题似乎是如果less.env设置为production导入的文件以一种奇怪的方式缓存,并且在调用之后不会加载less.modifyVars():

https://github.com/less/less.js/pull/721#issuecomment-11611703

因此,设置环境development似乎可以解决问题:

DEMO

修改后的标记:

<!DOCTYPE html>
<html>
 <head>
   <link rel="stylesheet/less" type="text/css" href="less/problem.less" />
   <script type="text/javascript">
    less = { env: "development" };
   </script>
   <script src="//cdnjs.cloudflare.com/ajax/libs/less.js/1.4.1/less.min.js#!watch" type="text/javascript"></script>
  </head>
 <body>
   <a href="javascript:void(0)" onclick="less.modifyVars({ '@background': '#FF0000' })">Apple Style!</a>
   <a href="javascript:void(0)" onclick="less.modifyVars({ '@background': '#FFFF00' })">Banana Style!</a>
  </body>
</html>
Run Code Online (Sandbox Code Playgroud)