在css中,當一個子事件懸停時,如何停止在父元素中觸發的:hover
事件,以便它只在父級本身被佔用時觸發?在這種情況下,我的子元素實際上被定位在它的父元素之外,並且具有絕對定位,所以當父子變得徘徊時父變化有點奇怪。使css:懸停隻影響父元素
我做了一個JSFiddle來說明這個問題。
這是我使用過的解決方案的JSFiddle。
在css中,當一個子事件懸停時,如何停止在父元素中觸發的:hover
事件,以便它只在父級本身被佔用時觸發?在這種情況下,我的子元素實際上被定位在它的父元素之外,並且具有絕對定位,所以當父子變得徘徊時父變化有點奇怪。使css:懸停隻影響父元素
我做了一個JSFiddle來說明這個問題。
這是我使用過的解決方案的JSFiddle。
有一個純CSS的解決方案(甚至是兩個實際上),但兩者是有代價的。
您可以添加指針事件:無;到你的子元素 - 但它不會迴應它自己的懸停樣式。不幸的是,在IE 11以下版本(http://caniuse.com/#search=pointer-events)中不支持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; }
簡單地說:不要嵌套你的#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。
我不認爲這是必要的。 – BoltClock
@BoltClock嗯,我已經嘗試過沒有它;顯然'html'和'body'在默認情況下不會獲得'position:relative;'。 – Chris
該元素需要嵌套在它的父親 – CupOfTea696