使用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控件的开销。
- 在您的处理程序中,通过查询字符串接受clientID – 这允许您在客户端级别上缓存
- 在.master文件中,您可以链接到它。”>
在你的处理程序中,你有几种方法可以使用CSS。
- 只需要为css提供一堆response.write,并输入相关的客户端值
- 使用自己的特殊标识符创建外部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,所以你可能想看看……
哦,确保你的缓存参数正确!