2011-03-17 49 views
1

我有一個MVC網站,除了特定的設計元素,用一種特定的顏色(比如說藍色)着色以外,它是黑白色的。我做了所有來自CSS的着色。是否可以在運行的mvc網站中編輯css文件?

我想要做的就是不時切換到另一個顏色。問題是,如果我這樣做切換讓加載文檔時從jquery說,一個異步加載元素中的顏色不會改變。

是否有可能從MVC中更改css文件本身,或者是否也有異步加載元素的事件?

+0

如果您自己編輯CSS文件,其他人在更改時瀏覽網站會發生什麼?他們是不是會看到不同的顏色,儘管它可能與他們的活動無關? – drudge 2011-03-17 20:24:18

+0

真的沒關係。這整個事情基本上只是設計。因此,讓我們假設網站的一般高亮顏色從藍色變爲綠色,如果這就是您所說的話,那麼看起來不會是錯誤,因爲所有藍色元素都會切換爲綠色。所以我覺得沒關係。 – Tenshiko 2011-03-19 17:51:14

回答

4

把不同的元素放在不同的文件中,然後只包括你關心的那個?例如:

在文件default.css

#myDiv { 
    color: blue; 
} 

現在我可以有其他的文件..。讓我們說red.css

#myDiv { 
    color: red !important; 
} 

現在,在您的主頁,你可以基於任何商業邏輯,你喜歡加載red.css。以下是一個示例:

<link rel="stylesheet" type="text/css" href="/css/default.css" /> 
<% if (SomeCondition) { %> 
    <link rel="stylesheet" type="text/css" href="/css/red.css" /> 
<% } %> 
+0

這實際上不是一個壞主意! :)但不幸的是,這個網站的管理員不能勝任這件事,所以我不能要求她每次切換到新顏色時都寫一個新的CSS。我也猜不出他們將來會使用什麼顏色,所以我不能(或不想)限制他們的選擇。我在想的是管理界面上的一個小型彩色選擇器,當單擊「保存」按鈕時,它會在css中進行更改。 – Tenshiko 2011-03-19 17:47:04

+1

將顏色選擇器值放在數據庫中,然後創建一個「模板」CSS文件。然後做Brant Bobby的建議,除了做一個簡單的字符串替換你的顏色值。現在你已經獲得了MVC根據存儲在別處的顏色值生成的樣式表。 – 2011-03-21 14:40:39

2

您的顏色多久變化一次?如果更改不經常發生,則可以創建一個操作方法,該方法根據當前時間返回不同的樣式表。

public ActionResult GetCss() { 
    string stylesheet = GetStylesFromSomewhere(); 
    return Content(stylesheet, "text/css"); 
} 
+0

它不會經常發生。我們每隔一個月說一次。但正如我在上面的評論中所描述的那樣,我不知道他們將來會使用哪種顏色,並且我不能要求siteadmin編寫css。真的不想成爲那樣的人:) – Tenshiko 2011-03-19 17:54:34

1

我重讀了這個問題,認爲我應該給出一個完全不同的答案。

該CSS主要是聲明性的。這是一個很大的方便。如果你聲明的是這種方式,你不需要關心在新元素上重新應用css,或者重新處理DOM。它發生在「瀏覽器中」。每次發生某種事情(例如添加新元素)時,都必須將新元素強制更改爲新狀態,這不僅不方便,而且會導致大量錯誤。所以不,沒有「異步加載元素」的一般事件,但你不應該尋找一個。

CACHING

具有恆定的CSS文件中的任何網絡環境主要是一個好主意。瀏覽器緩存css,並且可以在每次需要時使用它。如果你改變你的CSS,瀏覽器不會注意到。當然,需要考慮很多設置,但在大多數情況下都是如此。

所以,如果你可以編輯你的css文件,它不會真的很重要,因爲你需要以某種方式告訴瀏覽器注意到這一變化。

有一種技術叫做高速緩存禁用它主要把GET參數的CSS後,如:??

<link href="https://www.famous-cats.com/style/puna.css?v=3" rel="stylesheet" type="text/css" /> 

瀏覽器認爲,V = 1是從不同的V = 2,雖然你只是引用了同一個文件。所以它會使用不同的GET參數緩存它的每個版本。

好的。

修改文件

但即使你更改文件:這是改變CSS文件本身是一個好主意?如果95%的規則每次都是相同的(所有不是關於那一種顏色的),您可能想要將其分隔在「主」文件中,並且只更改關於顏色的部分,這些部分可以不同文件/內聯html。

關於更改文件的另一件事是,如果您不打算按程序生成新樣式,則應該只寫常量文件並切換它們。

DOTLESS

這是lesscss到asp.net的端口。檢查http://lesscss.org/它的功能,它基本上是一個語法略有不同的sass。

好的一點是,你可以使用變量,並從url參數中獲取它的值,所以如果你鏈接style.less?color = fuschia,它只會將名爲「color」的變量設置爲你喜歡的顏色。

少就是乾淨的東西,可以大大減少開發時間。

的解決方法,我建議

只是做着色的CSS不同於主之一:

<link href="https://www.famous-cats.com/style/main.css" rel="stylesheet" type="text/css" /> 
<link href="https://www.famous-cats.com/style/color.less?color=00FF55" id="colorcss" rel="stylesheet" type="text/css" /> 

如果你需要改變顏色,只要致電:

document.getElementById('colorcss').href = 'color.less?color=F35741'; 

(我給鏈接標籤一個id)。

它的工作原理。

深入淺一點,並檢查如何使用顏色變量。你可以在管理員上選擇一種顏色。

另外內聯的CSS不是魔鬼的工作,你可以輕鬆地在剃刀上創建它。如果這只是一些規則,它不會傷害任何人。所以,如果你不多,可以使用內聯css,或用MVC控制器動作(只需將mimetype設置爲text/css,並使用URL參數進行顏色更改/緩存清除)來生成css。

我希望這能回答你的問題。

+1

嗯......聽起來有趣!我會試試這個! – Tenshiko 2012-02-16 10:18:43

相關問題