Изменение дочернего элемента CSS при падении родителя
Прежде всего, я предполагаю, что это слишком сложно для CSS3, но если там есть какое-то решение, я бы с удовольствием согласился с этим.
HTML довольно прост.
<div class="parent">
<div class="child">
Text Block 1
</div>
</div>
<div class="parent">
<div class="child">
Text Block 2
</div>
</div>
Для дочернего div установлено: none; по умолчанию, но затем изменяется на отображение: block; когда мышь зависает над родительским div. Проблема заключается в том, что эта разметка появляется в нескольких местах на моем сайте, и я хочу, чтобы ребенок отображался, если мышь над ним родительская, а не если мышь находится над любым из других родителей (все они имеют один и тот же класс имя и отсутствие идентификаторов).
Я пробовал использовать $(this)
и .children()
безрезультатно.
$('.parent').hover(function(){
$(this).children('.child').css("display","block");
}, function() {
$(this).children('.child').css("display","none");
});
Ответы
Ответ 1
Почему бы просто не использовать CSS?
.parent:hover .child, .parent.hover .child { display: block; }
а затем добавить JS для IE6 (внутри условного комментария для примера), который не поддерживает: правильно наведите курсор:
jQuery('.parent').hover(function () {
jQuery(this).addClass('hover');
}, function () {
jQuery(this).removeClass('hover');
});
Вот быстрый пример: Fiddle
Ответ 2
Не нужно использовать JavaScript или jquery, CSS достаточно:
.child{ display:none; }
.parent:hover .child{ display:block; }
СМОТРЕТЬ ДЕМО
Ответ 3
Используйте toggleClass()
.
$('.parent').hover(function(){
$(this).find('.child').toggleClass('color')
});
где color
- класс. Вы можете стилизовать класс так, как вам нравится, чтобы достичь желаемого поведения. В этом примере демонстрируется, как класс добавляется и удаляется с помощью мыши.
Проверьте рабочий пример здесь.
Ответ 4
.parent:hover > .child {
/*do anything with this child*/
}
Ответ 5
У меня есть то, что я считаю лучшим решением, поскольку оно масштабируется до большего количества уровней, сколько угодно, не только двух или трех.
Я использую границы, но это также можно сделать с желаемым стилем, например фоном.
С границей идея состоит в следующем:
- У другого цвета границы есть только один div, div над которым находится мышь, а не на любом родителе, а не на любом дочернем элементе, поэтому можно увидеть только такую границу div в другом цвете, в то время как остальное останется на белом.
Вы можете проверить его на: http://jsbin.com/ubiyo3/13
И вот код:
<!DOCTYPE html>
<html>
<head>
<meta charset=utf-8 />
<title>Hierarchie Borders MarkUp</title>
<style>
.parent { display: block; position: relative; z-index: 0;
height: auto; width: auto; padding: 25px;
}
.parent-bg { display: block; height: 100%; width: 100%;
position: absolute; top: 0px; left: 0px;
border: 1px solid white; z-index: 0;
}
.parent-bg:hover { border: 1px solid red; }
.child { display: block; position: relative; z-index: 1;
height: auto; width: auto; padding: 25px;
}
.child-bg { display: block; height: 100%; width: 100%;
position: absolute; top: 0px; left: 0px;
border: 1px solid white; z-index: 0;
}
.child-bg:hover { border: 1px solid red; }
.grandson { display: block; position: relative; z-index: 2;
height: auto; width: auto; padding: 25px;
}
.grandson-bg { display: block; height: 100%; width: 100%;
position: absolute; top: 0px; left: 0px;
border: 1px solid white; z-index: 0;
}
.grandson-bg:hover { border: 1px solid red; }
</style>
</head>
<body>
<div class="parent">
Parent
<div class="child">
Child
<div class="grandson">
Grandson
<div class="grandson-bg"></div>
</div>
<div class="child-bg"></div>
</div>
<div class="parent-bg"></div>
</div>
</body>
</html>
Ответ 6
Ответ Стивена правильный, но вот моя адаптация его ответа:
HTML
<div class="parent">
<p> parent 1 </p>
<div class="child">
Text Block 1
</div>
</div>
<div class="parent">
<p> parent 2 </p>
<div class="child">
Text Block 2
</div>
</div>
CSS
.parent { width: 100px; min-height: 100px; color: red; }
.child { width: 50px; min-height: 20px; color: blue; display: none; }
.parent:hover .child, .parent.hover .child { display: block; }
JQuery
//this is only necessary for IE and should be in a conditional comment
jQuery('.parent').hover(function () {
jQuery(this).addClass('hover');
}, function () {
jQuery(this).removeClass('hover');
});
Вы можете увидеть этот пример работающий в jsFiddle.
Ответ 7
Если вы используете Twitter Bootstrap стиль и базу JS для выпадающего меню:
.child{ display:none; }
.parent:hover .child{ display:block; }
Это недостающая часть для создания липких выпадающих списков (которые не раздражают)
- Поведение:
- Оставайтесь открытыми, когда вы нажимаете, закрывайте их при повторном нажатии в другом месте на странице
- Закройте автоматически, когда мышь прокручивается из элементов меню.
Ответ 8
Чтобы изменить его из css, вам даже не нужно устанавливать дочерний класс
.parent > div:nth-child(1) { display:none; }
.parent:hover > div:nth-child(1) { display: block; }
Ответ 9
Не уверен, есть ли ужасные причины для этого или нет, но он работает со мной в последней версии Chrome/Firefox без каких-либо видимых проблем с производительностью с довольно большим количеством элементов на странице.
*:not(:hover)>.parent-hover-show{
display:none;
}
Но таким образом все, что вам нужно, - это применить parent-hover-show
к элементу, а остальное позаботится, и вы можете сохранить любой тип отображения по умолчанию, который вы хотите, без необходимости всегда "блокировать" или создавать несколько классов для каждого тип.