将鼠标悬停在子嵌套元素上不应影响父元素

时间:2018-10-25 08:27:52

标签: javascript jquery html css

我的页面的HTML就是这样。当我将鼠标悬停在孩子身上时,它也会触发父对象的悬停。当我将孩子悬停时,我只希望孩子悬停有效。 我该如何实现?首选CSS解决方案,但也可以添加javascript

<div class="element">
  <span class="inv"> invisible1 </span>
  <span class="col1"> test </span>
  <div class="element"> 
    <span class="inv"> invisible2 </span>
    <span class="col2"> test child </span>
  </div>
</div>

CSS:

.inv{
  opacity: 0;
}
.element:hover > .inv{
  opacity: 100;
}

2 个答案:

答案 0 :(得分:4)

简单的答案:您不能阻止将鼠标悬停在父对象上。

长答案:除非javascript阻止,否则事件始终会在dom树上冒出气泡,但是对于CSS而言,该元素仍会悬停在其上。原因之所以简单,是因为既然孩子在父母的内部,将孩子悬停就可以清楚地知道您也在悬停父母。

但是,您可以更改标记以适应您的需求。

.inv {
  opacity: 0;
}

.item:hover>.inv {
  opacity: 100;
}
<div class="element">
  <div class="item">
    <span class="inv"> invisible1 </span>
    <span class="col"> test </span>
  </div>
  <div class="element">
    <div class="item">
      <span class="inv"> invisible2 </span>
      <span class="col"> test child </span>
    </div>
  </div>
</div>

答案 1 :(得分:1)

这是一个骇人的解决方案,可让您将鼠标悬停在可见的文本上以显示隐藏的文本。技巧是使用伪元素扩展隐藏的文本以捕获悬停事件。

这是一个骇人听闻的解决方案,因为您需要指定一个可能覆盖其他元素的大值(可能还有其他副作用)

.inv {
  opacity:0;
  position:relative;
}
.inv:before {
  content:"";
  position:absolute;
  top:0;
  left:0;
  bottom:0;
  right:-200px; /*this need to be big to cover the visible text*/
}
.inv:hover {
  opacity:1;
}
<div class="element">
  <span class="inv"> invisible1 </span>
  <span class="col1"> test </span>
  <div class="element">
    <span class="inv"> invisible2 </span>
    <span class="col2"> test child </span>
  </div>
</div>