2010-04-11 51 views
0

我擁有一個帶有主頁的簡單網站。要將屬性設置爲內容頁面上的元素(例如Textbox),我使用CSS。在設計器中它運行良好,但是當我啓動一個網站時,風格不適用於控件。原因很簡單。說,我有一個TextBox與內容頁id="TextBox1",它被放置在ContentPlaceHolder1。在CSS文件中,我爲ID爲#TextBox1的對象設置了屬性。當由於母版頁名稱變形而啓動網站時,它會得到一個如ctl00_ContentPlaceHolder1_TextBox1的標識,該標識未在母版頁中包含的CSS文件中定義。內容頁面中的CSS和控件名稱損壞

什麼是這個問題的正確解決方案?硬編碼名稱似乎不太好。

+0

使創建真正的級聯樣式表文件的努力,因爲這個詞是在縮寫什麼。聽起來你可能太依賴ID選擇器了。更多地使用類並更多地使用標籤選擇器。 – mare 2010-04-11 19:39:17

回答

2

使用CssClass,像這樣:CssClass="myClass",然後在您的樣式表,而不是這樣的:

#TextBox1 { /* styles */ } 

你必須這樣:

.myClass { /* styles */ } 

值得一提的是,.NET 4.0修復或允許您更好地管理在html中生成的ID,see here for details

+0

這很明顯,但我已經爲他們使用類。對於一些控件,我使用類來爲單個(例如背景)設置公共屬性(例如寬度和高度)和ID。所以在你的解決方案中,我必須做大量的複製粘貼操作,以便將普通類的屬性改爲新類而不是它們的ID。 – flashnik 2010-04-11 19:11:51

+3

@flashnik - 不是這樣!你可以這樣做:'CssClass =「class1 class2 class3」'只需在兩個空間之間分配多個類。如果這些類具有相同的屬性定義,則列表中的最後一個獲勝。 – 2010-04-11 19:19:52

+0

謝謝,現在很清楚。我不知道我可以在'class ='中寫幾個類。 – flashnik 2010-04-11 19:36:58

1

最簡單的解決方案是應用您的CSS規則,使用classnames(不會變形)而不是ID。

正確的解決方案是使用 ClientID屬性,該屬性返回損壞的ID。

例如:

.Something #<%=TextBox1.ClientID %>` { 
    color: red; 
} 

但是,你只能做的是內聯樣式表。

上的控件
+0

我應該添加什麼,以便像'<%='這樣的符號不會是錯誤? VS顯示沒有選擇器。 – flashnik 2010-04-11 19:14:53

+0

VS會顯示語法錯誤;這是編輯器中的一個錯誤。如果您運行該頁面,它將_will_工作。 (僅當CSS內聯時) – SLaks 2010-04-11 19:27:04

+0

不,它不是內聯的,而是在單獨的文件中。 – flashnik 2010-04-11 19:35:27

2

由於Nick和SLaks都說這兩個類都是最好的。您可以在類屬性中分配多個類,它將聚合指定的所有類的所有屬性,覆蓋它與早期類共享的任何屬性。 css文件中類定義的順序設置它們的應用順序。

<style type="text/css"> 
.genericTextBox 
{ 
background-color: #eee; 
color: black; 
} 
.textbox1 
{ 
background-color: #3ee; 
font-size: larger; 
} 
</style> 

<asp:TextBox id="textBox1" CssClass="textbox1 genericTextBox" runat="server"></asp:TextBox> 

的風格得到應用的順序是先genericTextBox,因爲它首先在風格定義(基本類的順序被忽略)。它設置顏色和背景顏色,然後應用樣式textbox1並覆蓋背景顏色並添加字體大小。所以最後你用來自文本框1的顏色和來自文本框1的背景顏色和字體大小結束。

編輯:在文本框改變類的CssClass

+0

@Felan,謝謝你的擴展解釋。 – flashnik 2010-04-11 19:39:56

相關問題