我試圖找出如何讓一個(gè)具有position: absolute的子元素位于其父元素之外,而不會(huì)觸發(fā)父元素的:hover效果。
因?yàn)楦冈鼐哂袘彝PЧ宰釉貙⒂|發(fā)父元素,即使該子元素在父元素的邊界之外。
是我遺漏了什么屬性,還是這就是HTML中繼承的工作方式?
圖片示例:
在這幅圖中,我的鼠標(biāo)光標(biāo)在子div內(nèi)部,但在父div外部。
body {
display: flex;
align-items: center;
justify-content: center;
}
.container {
background-color: black;
width: 800px;
aspect-ratio: 1 / 1;
}
.container:hover {
background-color: darkorange;
}
.child {
position: absolute;
background-color: red;
width: 100px;
height: 100px;
transform: translate(-50px, 0px);
}
<div class="container">
<div class="child"></div>
</div>
為此,您可以使用以下解決方案。
可以在子元素上使用pointer-events: none。但是請記住,這將阻止所有類型的指針事件,而不僅僅是懸停事件。所以任何種類的點(diǎn)擊事件也不會(huì)在子元素上起作用。
另一個(gè)選擇是在css中使用:has()方法。:has()允許您將滿足傳遞給它的條件的元素作為目標(biāo)。你可以這樣做-
.container:not(:has(.child:hover)):hover {
background-color: darkorange;
}
這將防止容器懸停在其子元素上時(shí)出現(xiàn)懸停效果,這是在:has()方法中指定的。 下面是演示這種方法的JSFiddle示例。 在此閱讀更多關(guān)于:has()的信息
可以添加指針-事件:無;這使得它不會(huì)觸發(fā)任何鼠標(biāo)事件,包括鼠標(biāo)懸停。
<!DOCTYPE html>
<head>
<style>
body {
display: flex;
align-items: center;
justify-content: center;
}
.container {
background-color: black;
width: 800px;
aspect-ratio: 1 / 1;
}
.container:hover {
background-color: darkorange;
}
.child {
position: absolute;
background-color: red;
width: 100px;
height: 100px;
transform: translate(-50px, 0px);
pointer-event: none;
}
</style>
</head>
<body>
<div class="container">
<div class="child"></div>
</div>
</body>