2011-11-17 17 views
5

Ho questo codice su una pagina di login:CSS selezione di un div dopo un div con un div

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

mi piacerebbe selezionare div # navigazione, ma solo quando segue div # intestazione che contiene div # homeBanner. La ragione è che ho un codice simile su una pagina diversa:

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

Non voglio influenzare lo stile del div # navigazione quando segue div # intestazione che contiene div # SiteBanner. Ha senso ciò?

Come si seleziona la navigazione div # solo quando segue l'intestazione div # che contiene div # homeBanner? Ho pensato che fosse:

div#header div#homeBanner > div#navigation 

... ma non sembra funzionare.

+0

Ciò significa "dentro" div # header', il primo 'div # navigation' dopo un' div # homeBanner' ". – rid

+0

Hai ragione. Ho anche provato '(div # header div #homeBanner) + div # navigation' ma non ha funzionato! –

risposta

7

Il problema è che si sta tentando di selezionare il fratello di un elemento genitore basato sul figlio del genitore, che non è possibile in CSS.

La soluzione migliore è aggiungere una classe a #header (o anche body) in base a tali informazioni quindi utilizzare tale classe.

Ad esempio:

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

Con questo selettore (come detto da altri, utilizzare + per i fratelli, non > per i bambini):

#header.home + #navigation 
+0

Per applicare la classe dinamicamente con jQuery, usa '$ ('# header: has (#homeBanner)'). AddClass ('home');' – BoltClock

+0

O anche più semplicemente, fai tutto in jQuery, perché tutti i ragazzi fantastici lo fanno tutto in jQuery: '$ ('# header: has (#homeBanner) + #navigation'). css (/ * Fai cose che dovresti fare con i CSS ma non lo fai perché sei fico e tutto * /); ' – BoltClock

+0

Buona chiamata su jQuery. Penso che implementerò una nuova classe, anche se stavo cercando di evitarlo, poiché sembra essere l'approccio più logico ei miei colleghi tendono a disapprovare gli hack di jQuery :) –

0

Si prega di provare il seguente codice:

div#header + div#navigation 

Utilizzare il segno + per i sibblings.

+0

Provato inutilmente. Hai ragione sull'uso di + over> però. Ho mescolato quelli. –

+0

Questo seleziona '# navigation' che viene dopo' # homeBanner', non '# header'. – BoltClock

Problemi correlati