我有一个可以部署到十几个客户端的网站。主网站有一个基本模板,每个客户端都有一个覆盖颜色的客户端文件夹。问题是有很多CSS文件,因此进行更改会迫使我们更新每个客户端需要很长时间。自动构建过程负责替换更新的文件。
我想将CSS文件更改为usercontrols,然后这些用户控件可以从另一个存储客户端特定值的usercontrol继承。
因此,我没有一个forms.css文件,而是一个/client/forms.css文件,而是有一个Forms.ascx文件,该文件继承自包含颜色的usercontrol。
例如:
<%@ Control Language="C#" ClassName="Forms" %>
<%@ Register TagPrefix="css" TagName="Client" Src="~/css/ClientStyling.ascx" %>
/* CSS Document */
body
{
color:<%=Client.BodyColor%>
}
然后,母版页将继承自usercontrol。这将使客户端站点的维护变得更加容易。
这个解决方案是否有效且值得推荐?或者有更好的方法来实现相同的最终结果吗?
如果可以,那么还可以让Forms.ascx控件将标记输出为CSS吗?或者使扩展名.css仍然具有ascx属性?
答案 0 :(得分:11)
您最好不要创建通用处理程序,而是使用Web控件。这不会有Web控件的开销。
在你的处理程序中,你有几种方法可以使用CSS。
答案 1 :(得分:7)
另一个需要考虑的选择可能就是使用“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甚至允许监控整个目录
答案 2 :(得分:1)
将其作为文件写出来,让浏览器像任何其他CSS文件一样选择它。
制作内联样式表可以防止客户端缓存机制,迫使您的CSS随每个页面一起提供。
答案 3 :(得分:1)
这完全有可能。您可能也想考虑级联样式表,以便动态样式导入(可能更大的)静态样式。
Asp.NET也支持主题,但说实话,CSS更强大。
为什么你认为ASCX而不是ASPX?我曾经想过,由于一个css文件代表一个完整的响应,它可以全部适合页面。
ashx可能是您可以实施的最轻,最快的处理程序形式,因此您可能希望看一下......
哦,确保你的缓存参数正确!