2013-10-09 3 views
0

Мне нужно изменить #hidden на display:block, когда #aaa завис над. Он не работает, потому что #aaa не соответствует уровню #hidden - есть ли способ управления полностью отдельным элементом при наведении курсора? Я пытаюсь создать CSS-навигацию w/subnav и показывать соответствующий subnav, когда навигационный элемент зависает.CSS - манипулировать другим элементом при зависании

HTML:

<div class="cheetahContainer"> 
    <div id="cheetah"> 
     <p><a href="#">Cheetah</a></p> 
    </div> 
</div> 
<div id="hidden"> 
     <p>A cheetah is a land mammal that can run up 2 60mph!!!</p> 
</div> 

CSS:

#cheetah { 
    background-color: red; 
    text-align: center; 
} 

a { 
    color: blue; 
} 

#hidden { 
    display:none; 
    color: orange; 
} 
#cheetah:hover{ 
    background-color:green; 
} 

#cheetah:hover + #hidden { 
    display:block; 
} 

http://jsfiddle.net/LgKkU/575/

+1

Я бы просто переместил '# hidden' в' class = "cheetahContainer", а затем вы можете манипулировать им в CSS так, как это делали - см. [Здесь] (http://jsfiddle.net/LgKkU/ 576 /). –

+0

Если вы создаете элемент навигации, почему бы не использовать ul/li? –

+0

Извините, что я использую ul/li в своем реальном коде, я просто схватил jsfiddle, который работал с прямыми братьями и сестрами, но не с этим макетом. – tylerl

ответ

1

Поскольку ваша ссылка не родственный ваших #hidden DIV (таким образом, вы не можете использовать непосредственный селектор смежности) , вы должны изменить последнее правило с помощью

.cheetahContainer:hover + #hidden { 
    display:block; 
} 
+0

Я желаю, но нет, #cheetah на самом деле представляет элемент навигации, поэтому правило CSS должно быть специфичным для #cheetah. – tylerl

+1

, тогда вы должны опубликовать разметку, которую вы используете _actually_, иначе ответы могут оказаться бесполезными - мой ответ просто решает вашу проблему, как вы ее описали. – fcalderan

0

Это не является прямым родственный, так что вы должны использовать JS

Вот пример того, что нужно сделать:

var $cheetah = document.getElementById('cheetah'); 
var $hidden = document.getElementById('hidden'); 
$cheetah.addEventListener('mouseover', function() { 
    $hidden.style.display = 'block'; 
}); 
$cheetah.addEventListener('mouseout', function() { 
    $hidden.style.display = 'none'; 
}); 

Или вы можете использовать контейнер:

.cheetarContainer:hover + #hidden { 
    display: block; 
} 
+0

Два небольших исправления mate, 'cheetahContainer' имеют опечатку (' r' вместо 'h'), и в этом случае это' class', а не 'id'. – Harry

1

Наведение над элементом может влиять только на дочерние элементы в css. Вот фикс для примера:

<div class="cheetahContainer"> 
    <div id="cheetah"> 
     <p><a href="#">Cheetah</a></p> 
    </div> 
    <div id="hidden"> 
      <p>A cheetah is a land mammal that can run up 2 60mph!!!</p> 
    </div> 
</div> 

Однако я бы рекомендовал изменения CSS-то вроде этого:

.cheetahContainer:hover .hidden { 
    display: block; 
} 

Изменен из идентификаторов классов и добавил зависание к родительскому элементу, так что нависает над обнаруженный текст не возвращается к отображению: none;

+0

Незначительная коррекция - 'hidden' - это' id', а не 'class' :) – Harry

+1

@Harry да, извините за то, что не яснее, я рекомендовал переключиться на класс вместо id. Я предполагаю, что на этой странице может быть более одного скрытого элемента, поэтому я подумал, что класс будет лучшим вариантом. – maxm

Смежные вопросы