将自定义css样式用于主题布局的最佳方法是什么?

时间:2010-12-20 10:01:27

标签: css layout themes

假设我们有一个庞大的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也不会使用这些技术。

感谢您的帮助。

2 个答案:

答案 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)

哦,好的。但是对用户提供的字符串应用一些过滤非常重要,否则你会将你的应用程序暴露给一些严重的代码注入攻击!