2011-11-17 87 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