2010-04-27 115 views
2

我創建了一個網站,我想允許個性化的個人用戶高達如改變字體,背景顏色一定程度上的問題等。這樣做的問題是,我載入我的默認CSS文件已經默認一切的類。現在當我從我的數據庫中獲取背景顏色,那麼如果有背景顏色的空值,那麼應該加載默認的css類mystylesheet.css,如果值不爲空,那麼我想用我的默認CSS來覆蓋它。這怎麼可能?感謝提前:)初學者的關於CSS

+0

你在用什麼來做抓取?可能有幾十種不同的服務器端語言可以用於此目的,所以請編輯您的問題,因爲PHP,C#和Java都是可以用於此目的的可能語言。其次,你的數據庫使用什麼語言來編程返回值? – 2010-04-27 17:33:42

+0

我按照你的說法編輯了 – TCM 2010-04-27 17:39:18

回答

3

負載的風格標籤的默認stylesheat,並把你的動態之後的風格標籤中的樣式。

哪種樣式時,不同的風格定位相同元素由特異性決定的,而如果選擇是相同的,按順序使用。使用最後找到的樣式。

+0

+1:我打算說同樣的事情,但服務器重置並失去了我的迴應。 – Robusto 2010-04-27 17:49:35

1

編輯: Reason for CSS property precedence?

一種方法是從一個PHP腳本動態生成CSS文件。

你會包括像文件:

<link rel="stylesheet" type="text/css" href="css.php"> 

而且css.php文件看起來是這樣的:

<?php 
header('Content-type: text/css'); 
// whatever you want to ouput depending on the user 
?> 
+0

我不想動態地包含一個css文件。由於只有某些類需要更改,而不是全部。假設在我的默認班級中有100個班級,我想讓用戶只更改其中的3個班級。在這種情況下,動態構建一個新的css文件是不現實的。我想知道哪個優先?一個外部的css文件,內嵌的css或者你在>中編寫的文件,以及所有瀏覽器是否遵循相同的做法? – TCM 2010-04-27 17:42:04

+0

好的,用鏈接更新答案。 – zaf 2010-04-27 17:55:10

3

zaf提到的方法會要求您在要切換樣式表時重新加載頁面。我覺得這是一個更好的方法是一個類名補充人體 如果你有使用JavaScript

<body class="theme-1"> 
    <div class="main"><div> 
</body> 

然後每個樣式表應該包含在聲明的主題名稱的選項:

--theme1.css

.theme-1 div.main { 
    background-color: #eee 
} 

--theme2.css

.theme-2 div.main { 
    background-color: #f30 
} 

要切換樣式表,只需刪除舊的主題名稱並添加要使用的主題。

然後,您甚至可以動態添加樣式表,如果您爲用戶提供界面以自定義頁面的外觀和感覺。

改進的新答案:

我剛剛發現在ExtJS的鄉親實現一個很好的解決方案。它涉及使用<鏈接>標籤加載所有想要的樣式表。訣竅是你可以在鏈接元素上設置一個禁用屬性,這會導致它不適用。

舉一個例子,使用Firebug看看

http://www.extjs.com/deploy/dev/examples/themes/index.html

查找styleswitcher。js並看看函數setActiveStyleSheet

function setActiveStyleSheet(title) { 
    var i, 
    a, 
    links = document.getElementsByTagName("link"), 
    len = links.length; 

    for (i = 0; i < len; i++) { 
    a = links[i]; 
    if (a.getAttribute("rel").indexOf("style") != -1 && a.getAttribute("title")) { 
     a.disabled = true; 
     if (a.getAttribute("title") == title) a.disabled = false; 
    } 
    } 
} 
+0

Gufa的方法的工作原理除了如果你想回到不同的主題,你需要重寫css,以便它現在是最後的順序 – 2010-04-27 17:46:31

+0

嗨Jaun, 我允許用戶使用顏色選擇器來選擇背景顏色的頁面。所以,我不認爲這種方法也會起作用。作爲這種靜態方法,我們使用預先指定的顏色預先定義樣式表。 你能告訴我哪個優先嗎?外部css文件,內聯css或? 直到現在我已經發現古法的方法是最適合我的要求。 – TCM 2010-04-27 17:51:09

+0

不,我覺得古法的方法即使在加載不同的主題時也可以工作。 – TCM 2010-04-27 17:54:23