2012-09-14 20 views
7

Załóżmy, że mam kilka elementów div na tym samym poziomie DOM. Po najechaniu na jeden, chcę, aby wszyscy inni zmienili styl (np. Zmniejsz krycie lub zmień tło), podczas gdy ten, który się unosi, pozostaje taki sam.Zmiana stylu wszystkich innych elementów, gdy jeden element jest zawieszony

Nie mogę używać selektorów + lub ~, ponieważ potrzebuję go do wybrania wszystkich rodzeństwa, a nie tylko bezpośrednio sąsiadującego lub tylko następujących rodzeństwa. Zasadniczo szukam selektora "wszystkie rodzeństwo, ale ten". Czy to istnieje? Czy istnieje sposób na osiągnięcie tego bez JavaScript?

Odpowiedz

9

Sztuką jest umieszczenie pseudo-selektora na elemencie nadrzędnym w elemencie nadrzędnym, a następnie należy odpowiednio oznaczyć dziecko. Oto co mam na myśli:

.parent:hover .child { 
    opacity: .5; 
} 
.parent .child:hover { 
    opacity: 1; 
} 

Oto demo: http://jsfiddle.net/joshnh/FJAYk/

+0

Wow, to takie trywialne, że się wstydzę, nie mogłem o tym myśleć. Dzięki. – Bobe

+1

Ale poczekaj, jest haczyk. Istnieje wiele pustych przestrzeni między tymi elementami, o których wspomniałem, i nie chcę, aby przyciemniały je tylko przez umieszczenie kursora w div rodzica. – Bobe

+1

To jest haczyk, dokładnie. Jeśli tego nie chcesz, JavaScript jest drogą do zrobienia. – joshnh

1

Powyższy przykład jest bardzo dobra, ale jeśli istnieje różnica pomiędzy div i nie chcesz, aby wywołać efekt po najechaniu kursorem na puste miejsce nie ma potrzeby używania javascript.

Oto proste obejście:

wystarczy dodać float:left do .child i mieć pewność, że .parent ma overflow:visible (powinien być widoczny domyślnie).

W ten sposób .parent staje się 0px wysoki (więc puste miejsce nie wywoła efektu), ale zatrzymanie nad .child wyzwala pseudoklasy :hover.

Powiązane problemy