2011-11-17 19 views
5

tengo este código en una página de inicio de sesión:CSS seleccionando un div después de un div con un div

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

me gustaría para seleccionar div # navegación, pero sólo cuando se sigue div # encabezado que contiene div # homeBanner. La razón es que tengo un código similar en una página diferente:

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

no quiero afectar el estilo de navegación div # # cuando sigue cabecera div que contiene div # SiteBanner. ¿Esto tiene sentido?

¿Cómo selecciono div # navigation solo cuando sigue div # header que contiene div # homeBanner? Pensé que era:

div#header div#homeBanner > div#navigation 

... pero eso no parece funcionar.

+0

Eso significa "inside' div # header', el primer 'div # navigation' después de un' div # homeBanner' ". – rid

+0

Tienes razón. ¡También probé '(div # header div # homeBanner) + div # navigation' pero eso tampoco funcionó! –

Respuesta

7

El problema aquí es que está tratando de seleccionar el hermano de un elemento principal basado en el elemento secundario del elemento primario, lo que no es posible en CSS.

Su mejor opción es agregar una clase a #header (o incluso body) basada en esa información y luego hacer uso de esa clase.

Por ejemplo:

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

Con este selector (como han mencionado otros, utilizar + para los hermanos, no > para niños):

#header.home + #navigation 
+0

Para aplicar la clase dinámicamente con jQuery, use '$ ('# header: has (#homeBanner)') addClass ('home');' – BoltClock

+0

O incluso más simplemente, haga todo en jQuery, porque todos los chicos geniales todo en jQuery: '$ ('# header: has (#homeBanner) + #navigation'). css (/ * Haz las cosas que se supone que debes hacer con CSS pero no estás haciendo porque eres genial y todo * /); ' – BoltClock

+0

Buena llamada en el jQuery. Creo que implementaré una nueva clase, a pesar de que estaba tratando de evitar eso, ya que parece ser el enfoque más lógico y mis colegas tienden a fruncir el ceño en jQuery hacks :) –

0

Por favor, intente el siguiente código:

div#header + div#navigation 

Usa + para sibbling.

+0

Lo intenté en vano. Sin embargo, tienes razón en el uso de + over>. Tengo esos mezclados. –

+0

que selecciona '# navigation' que viene después de' # homeBanner', no '# header'. – BoltClock