在css中,如何在子事件悬停时停止在父元素中触发:hover
事件,这样只有当父事件本身被悬停时才会触发它?在这种情况下,我的子元素实际上位于它的父元素之外,具有绝对定位,所以当父元素被徘徊时父元素发生变化时有点奇怪。
我做了JSFiddle来说明问题。
以下是我的示例所用解决方案的JSFiddle。
答案 0 :(得分:14)
有一个纯粹的CSS解决方案(实际上甚至是两个),但两者都需要付出代价。
您可以添加指针事件:无;你的孩子元素 - 但它也不会响应它自己的悬停样式。不幸的是,在版本11(Pointer-events)以下的IE中不支持http://caniuse.com/#search=pointer-events。
将您的父元素(除了已定位的子元素)的内容包装在另一个元素中(这就是此方法的成本)并将悬停样式应用于此包装。
两种方法的例子here。
.parent-2,
.parent { position:relative; background:#ddd; width:100px; height:100px; }
.parent:hover { background:blue; }
.child { position:absolute; top:0; left:130px; width:100px; height:50px; border:1px solid blue; pointer-events:none; }
/* doesn't work in opera and ie */
.content { position:absolute; top:0; left:0; width:100%; height:100%; z-index:0;}
.content:hover { background:blue; }
答案 1 :(得分:5)
简单地说:不要将#inner
div
嵌入其中。小演示:little link。请注意,我添加了:
html, body {
position: relative;
}
在这种情况下,这是必要的。
编辑:如果您坚持要嵌套,则需要一点JavaScript。这是一个示例:
var inn = document.getElementById("inner"), outt = document.getElementById("holder");
outt.onmouseover = function() {
this.style.backgroundColor = "rgb(0, 162, 232)"; /*I like this color :)*/
}
outt.onmouseout = function() {
this.style.backgroundColor = "orange";
}
inn.onmouseover = function(ev) {
ev.stopPropagation();
}
(如果使用jQuery编写,这会更短,但想法是一样的。)
以下是演示:little link。
答案 2 :(得分:1)
您需要使用一些JavaScript来阻止事件冒泡。看一下这个例子: