使用C#动态生成CSS文件

我有一个可以部署到十几个客户端的站点。 主网站有一个基本模板,每个客户端都有一个覆盖颜色的客户端文件夹。 问题是有很多CSS文件,因此进行更改会迫使我们更新每个客户端需要很长时间。 自动构建过程负责替换更新的文件。

我想将CSS文件更改为usercontrols,然后这些用户控件可以从另一个存储客户端特定值的usercontrolinheritance。

因此,我没有一个forms.css文件,而是一个/client/forms.css文件,而是有一个Forms.ascx文件,该文件inheritance自包含颜色的usercontrol。

例如:

  /* CSS Document */ body { color: } 

然后,母版页将inheritance自usercontrol。 这将使客户端站点的维护更加容易。

这个解决方案是否有效且值得推荐? 或者有更好的方法来实现相同的最终结果吗?

如果这是可能的,那么还可以让Forms.ascx控件将标记输出为CSS吗? 或者使扩展名.css仍然具有ascx属性?

您可能最好不要创建通用处理程序,而是使用Web控件。 这不会有Web控件的开销。

  1. 在您的处理程序中,通过查询字符串接受clientID – 这允许您在客户端级别上缓存
  2. 在.master文件中,您可以链接到它。”>

在你的处理程序中,你有几种方法可以使用CSS。

  1. 只需要为css提供一堆response.write,并输入相关的客户端值
  2. 使用自己的特殊标识符创建外部CSS文件 – 可能<%%>。 然后,您可以在NameValuePair集合中加载所有客户端特定的值,然后遍历外部CSS文件,解析<%NAME%>并替换为正确的值。 然后response.write这个文件。 更复杂但是它允许更多更清洁的CSS文件

另一个需要考虑的选择可能就是使用“CSS编译器” – 例如SASS , LESS甚至HSS ,它们可能支持像“mixins”这样的方便结构并包含其他文件。 这种方法可以允许一个系统,虽然不是动态的,但可以根据不同客户的需求轻松配置。

例如,使用“CSS编译器” ,整个颜色模式可以存储在单个文件中作为可导出的变量或模板(取决于“编译器”) – 修改该文件,“重新编译”**和wham,新的颜色方案接口无处不在(SASS还支持颜色数学 – 例如Hue移位)。 这可能使得使用静态内容的部署/管理足够可行以用于您的目的。

我使用SASS(它符合我的需求/风格,而LESS / HSS没有)。 我不会切换回来,除非我真的,真的不得不(也就是说:呃,从不) – SCSS模式下的SASS也理解CSS语法,所以你可以微观进化或混合搭配(LESS和HSS也是这样工作的,但HSS仅适用于更严格的CSS语法子集)。 CSS编译器也可以用于结合模板引擎(例如TT4)或利用包括动态生成的文件(不是动态动态的,如问题,但动态,因为它们来自其他一些数据源)如果额外的需要力量。

虽然只是普通的CSS级联和类名/选择器可以走很长的路,但我发现分离“逻辑级联”(CSS,CSS /级联至关重要)和“geeze,我希望这就像模板一样”更容易(CSS编译器,应该处理滥用CSS /级联的情况)。

** SASS和LESS都可以监控文件并自动重新编译。 SASS甚至允许监控整个目录

将其写为文件,让浏览器像任何其他CSS文件一样将其选中。

制作内联样式表可防止客户端缓存机制,从而强制您的CSS随每个页面一起提供。

这完全有可能。 您可能也想考虑级联样式表,以便动态样式导入(可能更大的)静态样式表。

Asp.NET也支持主题,但说实话CSS更强大。

你为什么要考虑ASCX而不是ASPX? 我曾经想过,因为一个css文件代表一个完整的响应,它可以全部适合页面。

ashx可能是你可以实现的最轻,最快的处理程序forms,所以你可能想看看……

哦,确保你的缓存参数正确!