2011-11-17 36 views
5

Mam ten kod na stronie logowania:CSS wybierając div po div z div

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

Chciałbym wybrać div # nawigację, ale tylko wtedy, gdy wynika div # nagłówek, który zawiera div # homeBanner. Powodem jest to, mam podobny kod na inną stronę:

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

nie chcę wpływać na styl div # nawigacji gdy wynika div # nagłówek, który zawiera div # siteBanner. Czy to ma sens?

Jak wybrać opcję nawigacji div # tylko wtedy, gdy następuje nagłówek div # zawierający element div # homeBanner? Myślałem, że to:

div#header div#homeBanner > div#navigation 

... ale to nie działa.

+0

Oznacza to "wewnątrz" div # header', pierwsze 'div # navigation' po' div # homeBanner'. – rid

+0

Masz rację. Próbowałem również '(div # header div # homeBanner) + div # navigation', ale to też nie działało! –

Odpowiedz

7

Problem polega na tym, że próbujesz wybrać rodzeństwo elementu nadrzędnego w oparciu o dziecko rodzica, co nie jest możliwe w CSS.

Najlepiej jest dodać klasę do #header (lub nawet body) na podstawie tych informacji, a następnie korzystać z tej klasy.

Na przykład:

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

Z tego selektora (jak wspomniano przez innych, należy + dla rodzeństwa, nie > dla dzieci):

#header.home + #navigation 
+0

Aby zastosować klasę dynamicznie za pomocą jQuery, użyj '$ ('# header: has (#homeBanner)') addClass ('home');' – BoltClock

+0

Lub jeszcze bardziej, rób wszystko w jQuery, ponieważ wszystkie fajne dzieciaki robią wszystko w jQuery: '$ ('# header: has (#homeBanner) + #navigation') css (/ * Rób rzeczy, które powinieneś zrobić z CSS, ale nie działają, ponieważ jesteś fajny i wszystko * /); ' – BoltClock

+0

Dobre wywołanie w jQuery. Myślę, że zaimplementuję nową klasę, mimo że starałem się tego uniknąć, ponieważ wydaje się, że jest to bardziej logiczne podejście, a moi koledzy często marszczą się na hacki jQuery :) –

0

Spróbuj następujący kod:

div#header + div#navigation 

Użyj znaku + dla dzieci.

+0

Wypróbowałem to bezskutecznie. Masz jednak rację przy korzystaniu z + over>. Mam pomieszane. –

+0

Który wybiera "# navigation", który przychodzi po '# homeBanner', a nie' # header'. – BoltClock