假设我们有一个庞大的CSS文件,用于设置应用程序的布局样式。现在,我们希望让用户更改布局的颜色以对其进行个性化。在设计和架构方面,进行此自定义的最佳方法是什么?我正在寻找一种非常容易实现的解决方案,而且不是非常具有侵入性。
如果我不需要,我也不想在服务器上模拟整个css文件。如果可能的话,我想将它保存在我的/ css文件中,没有任何服务器依赖性。
理想情况下,我想在默认情况下覆盖样式,但我认为这不可能,因为它可能会删除现有的样式。这意味着我会覆盖它们时会有重复的样式信息......这也很糟糕。重复=糟糕。
我想我们可以假设有一些与其帐户相关的服务器对象,其中包含多种颜色属性,如背景,菜单标签,链接颜色,悬停版本等。
public class Theme {
private String headerBackground = "#172636";
private String displayName = "#ffffff";
private String tabBackground = "#284767";
private String tabText = displayName;
private String hoverTabBackground = tabBackground;
private String hoverTabText = tabText;
private String selectedTabBackground = "#f5f5f5";
private String selectedTabText = "#172636";
private String tableHeaderBackground = headerBackground;
private String tableHeaderText = displayName;
private String tableSubHeaderBackground = tabBackground;
private String tableSubHeaderText = displayName;
private String hoverTableRowBackground = "#c0d2e4";
private String link = "#4e6c92";
我最好的猜测是只提供整个css文件并让我的MVC框架将主题与css文本合并,然后将其提供出来。这是最好的方法吗?这会强制浏览器永远不会缓存吗?
我的应用程序正在使用Spring / Hibernate,但我很确定即使您不使用Java / Spring也不会使用这些技术。
感谢您的帮助。
答案 0 :(得分:3)
让访问者/用户自定义他们的外观&感觉可以相当充实。您需要将属性存储在其配置文件中以保持该外观和外观。感受浏览器会话。
本质上,这意味着提供您根据需要呈现的自定义CSS文件。你可以在他们的客户端缓存它,并在/如果他们改变他们的LAF偏好时使用客户端JS重新加载这个文件。
一种方法是链接到他们的样式表:
<link type="text/css" rel="stylesheet" href="siteStyles.css" />
<link type="text/css" rel="stylesheet"
href="customStylesheet.jsp?userId=123123123" />
你需要一个相当独立的应用程序监听器,只需加载他们的配置文件,并且(可能)使用字符串替换(或任何最好的)填充模板文件。您需要确保响应mime-type设置为“text / css”。浏览器将完成剩下的工作。
要强制浏览器重新加载CSS文件,只需在查询字符串中添加一些guff(例如版本号):
<link type="text/css" rel="stylesheet"
href="customStylesheet.jsp?userId=123123123&vn=123" />
答案 1 :(得分:0)
哦,好的。但是对用户提供的字符串应用一些过滤非常重要,否则你会将你的应用程序暴露给一些严重的代码注入攻击!