不可能的。
::after
是一个伪元素,因此是它所属元素的一部分。如果::after
被徘徊,则该元素被徘徊,而不管::after
是否在被占用的空间内呈现,但是其父母或被呈现在完全不同的区域中。
当::after
放在父外,你可以通过给::after
pointer-events:none
取消父悬停效果,有效地让悬停(和所有其他指针事件)通过。但在你的情况下,他们会通过父母。
如果你想要一个物品内的物品不会被徘徊,你必须使用与position:relative
共同的父母在其上面的物品的兄弟姐妹覆盖它。兄弟姐妹必须放置在DOM
的悬停元素之后,或者需要比悬停元素更高的z-index
才能在上面呈现。
概念证明:
body {background-color: #ccc}
relative-parent,
relative-parent * {
display: inline-block;
padding: .3rem;
box-sizing: border-box;
}
relative-parent {
position:relative;
}
hover-element {
width: 10rem;
height:10rem;
background-color: #eee;
transition: all .3s cubic-bezier(.4,0,.2,1);
}
hover-element:hover {
background-color: #f00;
cursor: pointer;
color: #fff;
}
hover-element:after,
hover-mask {
position: absolute;
width: 4rem;
height: 4rem;
border: 1px solid #000;
box-sizing: border-box;
}
hover-element:after {
right: -5.3rem;
bottom: 2rem;
content: '::after'
}
hover-mask {
bottom: 2rem;
right: 2rem;
}
<relative-parent>
<hover-element>hover-element</hover-element>
<hover-mask>sibling</hover-mask>
</relative-parent>
你的情况是指在'after'元件保持所示,当鼠标移开你通过它的情况下,父母在那里溢出,如[这个例子的](https://jsfiddle.net/fthxb9z3/)? AFAIK mouseenter在鼠标悬停在'后面'会占用的区域时不会错误触发。 – ppajer
呃我认为它有点不同。为了更清楚起见,我在':after'里基本上有'content'显示的文本“abc”。它显示在正文的右侧。当我悬停主要文本时,我想将“abc”更改为“abcdef”。但现在,当我将鼠标悬停在“abc”上时,它也会变成“abcdef”。我想让它只改变文字,当我把鼠标放在实际的文字上时,而不是从':after'制作的“abc” – misaka
我在这里做了一个小提琴演示:https://jsfiddle.net/fthxb9z3/1/ 当我将鼠标悬停在“hola”上时,它确实悬停,但我希望它只悬停在“blah”上 – misaka