make css:hover只影响父元素

时间:2012-09-29 11:59:22

标签: css css3 hover pseudo-class

在css中,如何在子事件悬停时停止在父元素中触发:hover事件,这样只有当父事件本身被悬停时才会触发它?在这种情况下,我的子元素实际上位于它的父元素之外,具有绝对定位,所以当父元素被徘徊时父元素发生变化时有点奇怪。

我做了JSFiddle来说明问题。

以下是我的示例所用解决方案的JSFiddle

3 个答案:

答案 0 :(得分:14)

有一个纯粹的CSS解决方案(实际上甚至是两个),但两者都需要付出代价。

  1. 您可以添加指针事件:无;你的孩子元素 - 但它也不会响应它自己的悬停样式。不幸的是,在版本11(Pointer-events)以下的IE中不支持http://caniuse.com/#search=pointer-events

  2. 将您的父元素(除了已定位的子元素)的内容包装在另一个元素中(这就是此方法的成本)并将悬停样式应用于此包装。

  3. 两种方法的例子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来阻止事件冒泡。看一下这个例子:

css :hover only affect top div of nest