1

如何动态使用无点变量。我的意思是如何在无点文件中动态分配值。有什么办法吗?

style.less 文件包含

@url_image: 

#head{ background: url(@url_image) no-repeat left top white;}

如何在运行时赋值?

4

3 回答 3

1

有很多方法可以做到这一点。就我而言,较少的内容和动态参数都存储在数据库中。如果要更改十六进制代码颜色,可以执行以下操作,例如:

var parser = new dotless.Core.Parser.Parser();
var env = new dotless.Core.Parser.Infrastructure.Env { Compress = true, Debug = true, KeepFirstSpecialComment = false, DisableVariableRedefines = false };
var tree = parser.Parse(css.Detail.Text, null);

foreach (var key in layout.LessDetails.CurrentValues.Keys)
{
   var rule = tree.Variable("@" + key, tree);

   if (rule != null)
   {
      string value = layout.LessDetails.CurrentValues[key];

      if (value != null && value.StartsWith("#"))
      {
         rule.Value = new dotless.Core.Parser.Tree.Color(value.TrimStart('#'));
      }
   }
}

css.Detail.GeneratedText = tree.ToCSS(env);

这不是最终的解决方案,因为还有许多其他类型的参数,但它应该引导您朝着正确的方向前进。查看 dotless.Core.Parser.Functions 以获取有关各种选项的有用信息。

或者,还有另一个简单的选择。使用上面的代码,您可以简单地将更改的变量附加到 css.Detail.Text 字符串的末尾。这实际上是在 less.js 文件中 modifyVars 方法的工作方式。通过在最后再次添加参数,它会覆盖之前的设置值。

于 2013-10-21T23:07:22.477 回答
0

当您说在 .less 文件中动态更改时,我不确定您为什么只想在 less 文件中进行更改。如果您只是在 .less 文件中更改它,则必须编译该文件才能导航到 style.min.css 和 style.css 文件的更改,这是您无法以编程方式进行的。

这是你可以做的:

 $('#head').css('background-image', "url("new-source");

所以 jquery/javascript 是你最好的选择

于 2013-06-24T14:00:33.500 回答
0

如果您手动解析并输出无点文件,则可以做到这一点。

var config = DotlessConfiguration.GetDefaultWeb();
config.DisableVariableRedefines = true;

string less = File.ReadAllText(fileName);
StringBuilder sb = new StringBuilder(less);
sb.AppendLine(string.Format("{0}: {1};", "@url_image", "image.jpg"));

return LessWeb.Parse(sb.ToString(), config);
于 2013-07-24T13:46:59.247 回答