2011-11-17 66 views
5

我有一個登錄頁面上的驗證碼CSS選擇一個div一個div後一個div

<div id="header"> 
    <div id="homeBanner"> 
     ... 
    </div> 
</div> 
<div id="navigation"> 
    ... 
</div> 

我想選擇股利#導航,但只有當它跟隨DIV#頭包含DIV# homeBanner。原因是我有一個不同的頁面上類似的代碼:

<div id="header"> 
    <div id="siteBanner"> 
     ... 
    </div> 
</div> 
<div id="navigation"> 
    ... 
</div> 

我不想影響股利#導航的風格時,它跟隨DIV#頭包含DIV#siteBanner。這有意義嗎?

如何僅在div#header包含div#homeBanner時選擇div#navigation?我認爲這是:

div#header div#homeBanner > div#navigation 

...但似乎沒有工作。

+0

這意味着「內部'div#header','div#homeBanner'」後的第一個'div#navigation'「。 – rid

+0

你說得對。我也嘗試過'(div#header div#homeBanner)+ div#navigation',但那也行不通! –

回答

7

這裏的問題是,你試圖根據父母的孩子選擇父元素的兄弟,這在CSS中是不可能的。

您最好的辦法是根據這些信息爲#header(或甚至body)添加一個班級,然後利用該班級。

例如:

<div id="header" class="home"> 
    <div id="homeBanner"> 
     ... 
    </div> 
</div> 
<div id="navigation"> 
    ... 
</div> 

此選擇(如其他人所說,使用+兄弟姐妹,沒有>兒童):

#header.home + #navigation 
+0

要使用jQuery動態地應用該類,請使用'$('#header:has(#homeBanner)')。addClass('home');' – BoltClock

+0

或者更簡單地說,在jQuery中做所有事情,因爲所有酷酷的孩子都會一切都在jQuery中:'$('#header:has(#homeBanner)+ #navigation')。css(/ *做你應該用CSS做的事情,但不做,因爲你很酷, /);' – BoltClock

+0

jQuery的良好通話。我想我會實現一個新的類,即使我試圖避免這個問題,因爲它似乎是更合乎邏輯的方法,我的同事傾向於對jQuery黑客皺眉:) –

0

請嘗試以下代碼:

div#header + div#navigation 

使用+作爲兄弟姐妹。

+0

試過它無濟於事。儘管如此,你是正確的使用+ over。我把那些混在一起了。 –

+0

選擇'#homeBanner'後面的'#navigation',而不是'#header'。 – BoltClock