您可能会为此使用less (或其他一些具有客户端支持的预处理器)。我从来没有做过这样的事情,但这很有可能并且可能对你有用。
如果您从未使用过 CSS 预处理器,您可能希望在继续之前先在该主题上搜索一下。
基本思想是对您希望管理员修改的任何数据使用变量。这些将被保存在服务器端(可能在数据库中),然后用于生成单独的“变量”少文件。注意,因为less
需要编译这个文件,所以必须生成并保存到磁盘:
/* variables.less */
@mainContentWidth: 55%;
然后很可能,某种生成的映射 javascript/JSON 映射,将用于填充您的表单控件:
/* variables.js */
window.LESSVARS = {
// `type` here totally just an idea, but the idea is that a "percentage"
// field might be controlled with a slider, etc.
mainContentWidth: { value: "55%", type: "percentage" }
}
对于 CSS 的其余部分,是否使用 less 的其他功能取决于您,但这里的关键部分是您在适用的情况下使用您定义的变量:
/* styles.less */
@import "variables.less";
#MainContent { width: @mainContentWidth; }
公众永远不会看到任何这些,因为他们将得到一个汇编styles.css
,将它们放在一起,简单地说:
<link rel="stylesheet" type="text/css" href="styles.css">
但另一方面,管理员将收到未编译的 less 和映射 javascript 对象,这些对象将用于构建表单控件并维护状态:
<link rel="stylesheet/less" type="text/css" href="variables.less" />
<link rel="stylesheet/less" type="text/css" href="styles.less" />
<script src="variables.js" type="text/javascript"></script>
<script src="less.js" type="text/javascript"></script>
现在,当管理员操作表单控件时,您不再使用 jQuery 内联样式,而是通过以下方式更新页面less.modifyVars
:
// something like this, which updates the less variable state and then
// sends it to less which will recompile the CSS. Note that this is
// just a simple example. In the real version you'd probably want to
// track changes, etc.
function setVar(name, value) {
LESSVARS[name].value = val;
var o = {};
o['@'+name] = value;
less.modifyVars(o);
}
// which you'd then call on form control change
setVar('mainContentWidth', '30%');
最后,一旦管理员想要保留他们的更改,他们就会提交更改后的状态以进行保存。这可能是整个LESSVARS
对象或只是跟踪的更改。在服务器端,您将存储这些更改并触发variables.less
对styles.less
.