您可以使用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的其餘部分,無論您使用的較少的其他功能是你的,但這裏的關鍵部分是,你使用你定義的變量適用:
/* styles.less */
@import "variables.less";
#MainContent { width: @mainContentWidth; }
一般公衆將永遠不會看到任何這一點,因爲他們將送達編譯styles.css
這使它一起,簡單地說:
<link rel="stylesheet" type="text/css" href="styles.css">
但管理,而另一方面,將接收未編譯少和映射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
的重新編譯。
由於css規則的排序順序而不簡單...進行內聯更改,例如使用'$完成。css()'具有最高優先級。所以,如果有相同的選擇器有4個其他規則......很難知道文件中要更改什麼。並改變'#MainContent'共享一個規則,而不是與'#Sidebar'相關的維度...添加'width'可能會使整個佈局搞砸 – charlietfl
我正在考慮像素修正百分比和相應地調整其他元素來填充'我的JavaScript/jQuerry代碼中的'空白'。我只需要將所有這些更改保存到CSS中,同時保持所有這些不變。所以如果我改變了一個元素的寬度,我就會覆蓋它的寬度,它是鄰居,但是我會獨自留下它們的背景色,文本字體等所有其他元素的所有其他屬性。 – KrisRogo