我可以在LESS css中使用url参数吗?

时间:2012-02-11 09:27:09

标签: asp.net-mvc less dotless

说明:

我正在asp.net mvc环境中尝试LESS。

我使用dotless进行服务器端处理(我不想使用客户端处理,特别是在发布完整项目时)。

我必须根据不同的事物(例如一天中的时间)应用不同配色方案的设计。

在这种情况下感觉不那么强大,因为设计一个参数化的CSS并且只在每个主题的文件开头改变10个变量真的令人振奋。

问题:

但我需要以某种方式从外部参数更改颜色主题。

思路:

首先我认为像style.less?theme = fuschia这样的URL参数会很好,但我发现无法解析这样的事情。

然后我认为制作一个非常短的blue.less,green.less,orange.less只包含声明的颜色变量,并且在每个变量中都包含main.less将是一个可靠的解决方案。

我没有机会尝试第二种解决方案,但我认为这是一个以最强有力的方式征求意见的好时机。

问题又出现了:我想从外面控制我文件中的一些东西。

2 个答案:

答案 0 :(得分:23)

是的,你可以(因为我出于这个原因实现了这个功能)。

Dotless通过querystring参数支持来自外部的参数。

<link rel="stylesheet" href="style.less?foo=bar" />

让您使用以下内容:

@foo = bar;

参数注入代码非常简单。它只是将变量声明预先设置为普通的较少文件,因此作为查询字符串参数的任何内容都将遵循上述语法。

有问题的代码非常简单:https://github.com/dotless/dotless/blob/master/src/dotless.Core/Engine/ParameterDecorator.cs

答案 1 :(得分:5)

AFAIK,你不能传递dotnetless的参数来进行编译。

作为一个建议,为什么不只是调用不同的文件?使用Viewbag属性可以很容易地做到这一点。

要制作不同的较少的文件,首先要创建一个包含每组颜色的较少文件。然后导入基本css文件。 dotnetless会将父文件中的颜色定义与基本文件中的用法合并。所以你有类似的东西 -

@baseGray: #ddd;
@baseGrayDark: darken(@baseGray, 15%);
@baseGrayLight: lighten(@baseGray, 10%);
@import "baseCss.less";

我刚刚测试了这个和MVC3项目并且它可以工作。