2017-03-17 14 views
2

现在我有是否有可能改变:悬停后,但如果后面的元素本身被徘徊不能?

class-name:hover:after {} 

工作正常,但是当我将鼠标悬停在该元素的一部分之后,以及它触发。有没有办法让:hover CSS只出现在只是父元素(而不是:after生成的部分)?如果只用CSS就可以做到,我宁愿不诉诸Javascript。

我在这里做一个小提琴证明:https://jsfiddle.net/fthxb9z3/1/

它确实悬停时,我将鼠标悬停在“HOLA”,但我希望它只是做“嗒嗒”悬停

+0

你的情况是指在'after'元件保持所示,当鼠标移开你通过它的情况下,父母在那里溢出,如[这个例子的](https://jsfiddle.net/fthxb9z3/)? AFAIK mouseenter在鼠标悬停在'后面'会占用的区域时不会错误触发。 – ppajer

+0

呃我认为它有点不同。为了更清楚起见,我在':after'里基本上有'content'显示的文本“abc”。它显示在正文的右侧。当我悬停主要文本时,我想将“abc”更改为“abcdef”。但现在,当我将鼠标悬停在“abc”上时,它也会变成“abcdef”。我想让它只改变文字,当我把鼠标放在实际的文字上时,而不是从':after'制作的“abc” – misaka

+0

我在这里做了一个小提琴演示:https://jsfiddle.net/fthxb9z3/1/ 当我将鼠标悬停在“hola”上时,它确实悬停,但我希望它只悬停在“blah”上 – misaka

回答

2

不可能的。

::after是一个伪元素,因此是它所属元素的一部分。如果::after被徘徊,则该元素被徘徊,而不管::after是否在被占用的空间内呈现,但是其父母或被呈现在完全不同的区域中。

::after放在父外,你可以通过给::afterpointer-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>

+0

谢谢!我想在这一点上,使用Javascript会更容易haha – misaka

+1

实际上,在这方面'CSS'和'javascript'大致相同。 AFAIK,你不能改变元素的悬停区域。你所能做的就是用不可见的元素掩盖它,这样它就不再徘徊。 –

+0

啊,好的,我明白了。我会尝试先用你的想法处理。谢谢您的帮助!! – misaka

相关问题