У меня есть проблема с применением стиля к div, когда другой div зависает. Вот мой сценарий:
<div id="nav">
<div class="logged"></div>
<div class="nav_child"></div>
</div>
.logged:hover .nav_child {
display: initial;
}
#nav .nav_child {
display: none;
}
Но это не сработает. Я также пробовал .logged:hover >.nav_child
и .logged:hover +.nav_child
и все еще ничего. Он работает только с #nav:hover.nav_child
но мне нужно показать его, когда .logged
, а не когда #nav
.
Есть идеи?
Просто решил с Смежным соболиным комбинатором. Я объявляю и вызываю "logged" как id и добавляю + между.logged: hover и.nav_child, он работает.
Ссылка: Смежный комбонатор: http://css-tricks.com/child-and-sibling-selectors
Старый код: http://jsfiddle.net/8rdh7m2j/
Рабочий код:
<div id="nav">
<div class="logged" id="logged">Hello</div>
<div class="nav_child">Puff</div>
</div>
#logged:hover + .nav_child {
display: initial;
}
#nav .nav_child {
display: none;
}
Here is a good resource that covers this topic http://jsfiddle.net/ThinkingStiff/a3y52/
<div id="nav">
<div id="one" class="logged"></div>
<div id="two" class="nav_child"></div>
</div>
#one:hover ~ two,
{
background-color: black;
color: white;
}
Вы были на правильном пути с помощью .logged:hover +.nav_child
. Причина, по которой он не работает, заключается в том, что #nav.nav_child
имеет более высокую специфичность (потому что он включает в себя идентификатор) и поэтому имеет приоритет над предыдущим правилом.
Да, вы могли бы решить это, перейдя к идентификатору для logged
, как это было в вашем собственном ответе, но вместо этого вы можете повысить определенность правила зависания, добавив в свой идентификатор, который у вас уже есть:
#nav .logged:hover + nav_child {
Кстати, такие проблемы можно почти всегда отслеживать, используя инспектор стиля в панели вашего браузера. В этом случае вы увидите оба правила, и вы увидите, что второе было первым. Это легко приведет вас к выводу, что это проблема специфики. Большинство инспекторов стиля дадут вам возможность "подражать" зависающему состоянию.
Для получения дополнительной информации о специфике см. Https://developer.mozilla.org/en-US/docs/Web/CSS/Specificity. В вашем случае ваше первоначальное первое правило имеет спецификацию 20 (два класса), а второе - 101 (один идентификатор и один класс).
Даже просто удалите #nav из дочернего и +
.logged:hover+.nav_child {
display:initial;
}
.nav_child {
display: none;
}
.nav_child{ display: none; }
непосредственно в nav_child без потомка селектора из #nav. jsfiddle.net/aw4ejhys