2010-11-26 64 views
2

我有一個帶有CSS文件的Web窗體應用程序用於佈局。我的一個元素,在不使用ID的情況下在CSS中執行起來會困難得多,因爲我控制了可見性服務器端,所以還必須有runat="server"ASP.NET web窗體中的CSS選擇器

<div id="x"> 
    <div id="whatever" runat="server" visible="false"> 
     <div id="y"> 
      .... 
     </div> 
    </div> 
</div> 

我的問題是,在CSS,我不知道如何忽略whatever DIV與我的選擇,除非我內聯CSS,放在服務器到客戶端控制的翻譯,我不知道控件名稱直到運行時。

#x 
{ 
    position:absolute; 
    height:30px; 
} 

    #x #whatever??? #y img 
    { 
     margin:-7px 15px 0 30px; 
    } 

    #x #whatever??? div 
    { 
     width:250px; 
     float:left; 
    } 
etc. 

我應該如何解決這個問題?有沒有一個服務器端的容器控件,不渲染輸出,但可以用來控制其內容的可見性/渲染,或者CSS中有一個技巧是忽略該中間div?

這是因爲我有x div在母版頁中,而whatevery div都在頁面本身。我知道如果我使用MVC,這不會成爲問題,但此時切換不是一種選擇。

回答

1

使用CSS類選擇器是一個快速簡單的方法來解決這個問題 - 沒有CSS id選擇器那麼快,但它們總是能夠工作(你可以計算「whatever」div元素的客戶端ID,但是如果你例如,將其移動到面板控制,中繼器控制等)

+0

我嘗試了切換它們類選擇,但我遇到了一些未由ID/Class指定的組件問題(例如`#x div`)。這可能只是重做其中的一部分,但我對CSS不太熟悉。 .css文件來自外部設計人員,如果不需要,我寧願不改變它。 – Kendrick 2010-11-26 15:31:58

+0

難道你不能只做.x_class div嗎?這隻會意味着對CSS的輕微重寫,將id選擇器轉換爲類選擇器 – WiseGuyEh 2010-11-26 15:33:12

2

我不確定這是否只是您的示例,但您似乎每次選擇某件東西時都會鑽穿整個樹。這不是需要CSS,下面會做的伎倆:

直接的 'x' 選擇

#x 
{ 
    position:absolute; 
    height:30px; 
} 

任何影像都的 'Y'

#y img 
{ 
    margin:-7px 15px 0 30px; 
} 
後裔

任何div是'x'的後代

#x div 
{ 
    width:250px; 
    float:left; 
} 

Here是一個方便和易於理解的選擇器解釋,或多或少只是抓住你需要的一個,並在here(我最喜歡的測試網站)測試它。

1

如果您使用的是.net 4,您可以指定ClientIDMode="Static"作爲您需要在服務器端指定的相同標識的塊。

萬一有人需要它,你可以在你的JavaScript擷取由框架生成的ID是這樣的:

document.getElementById('<%= some_control.ClientID %>');