动态加载less.js规则

haw*_*ett 25 javascript css less

我正在考虑少用.js(看起来很棒),但我们的网站要求在初始页面加载后动态加载某些样式.但是,似乎必须在less.js脚本加载之前加载所有LESS样式表.即这是有效的

<link rel="stylesheet/less" href="/static/less/style.less"/>
<script src="http://lesscss.googlecode.com/files/less-1.0.30.min.js"></script>
Run Code Online (Sandbox Code Playgroud)

但如果换行,它会失败,firefox和chrome都不会尝试加载'style.less',除非它们被正确排序.本教程中明确指出了排序要求.

有没有办法在初始页面加载后加载较少的样式表?

请注意,此博客描述了"观看"功能 -

这将在您保存LESS代码时自动刷新CSS

因此,期望我可以在页面加载后添加一些LESS规则似乎是合理的.感觉就像我错过了一些东西.

干杯,

科林

更新:用于测试注释中描述的行为的代码(脚本后列出的样式表更少) -

<!DOCTYPE html>
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    <title>Simple</title>

  <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>
  <script src="/static/js/less-1.0.31.min.js"></script> 
  <link rel="stylesheet/less" href="/static/less/style.less" id="abc123"/>
</head>
<body>
  <div id="container">
    <div>Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet.</div>
  </div>
  <div id="#abc">Bingo</div>
</body>

<script>
console.log("refreshing styles...");
less.sheets.push(document.getElementById('abc123'));
//var lessStyle = $("<style>#abc { color: blue; }</style>").attr("id", "less:static-less-style").attr("type", 'text/less');
//$("head").append(lessStyle);
less.refresh(true);
console.log("refreshed...");
</script>
</html>
Run Code Online (Sandbox Code Playgroud)

和较少的样式表

@primary_color: green;

.rounded(@radius: 5px) {  
  -moz-border-radius: @radius;  
  -webkit-border-radius: @radius;  
  border-radius: @radius;  
}

#container {
  background: @primary_color;
  .rounded(5px);

  div {
    color: red;
  }
}
Run Code Online (Sandbox Code Playgroud)

clo*_*ead 29

我只是推了1.0.31 - 它有一个方法:less.refreshStyles()它将重新编译<style>标签type="text/less"- 尝试一下,让我知道它是否有效.

  • 出于兴趣,是否可以在不刷新所有内容的情况下处理单个工作表 - 例如 less.sheets.push(mySheet); less.loadStyleSheet(mySheet); ? 对于我的用例,现有工作表永远不会依赖于新加载的工作表...... (2认同)

小智 11

谢谢你提出这个问题 - 这对我帮助很大.我只是更新主题,以显示我如何动态添加CSS文件.

我使用了最新版本的LESS(1.3.3).

var stylesheetFile = 'file.css';
var link  = document.createElement('link');
link.rel  = "stylesheet";
link.type = "text/less";
link.href = stylesheetFile;
less.sheets.push(link);

less.refresh();
Run Code Online (Sandbox Code Playgroud)