如何启用指针事件来传递元素而不禁用它们?

时间:2018-03-04 19:14:29

标签: html css hyperlink anchor pointer-events

所以我有一个完整的列表项,我希望它是可点击的,但它内部的链接也需要可点击。事实证明你不能嵌套<a>标签,所以我制作了列表项和<a>兄弟姐妹,并将它们定位为重叠。

为了使列表的链接起作用,我必须禁用指针事件,以便它传递到下面的链接。然后我必须在容器中的每个上重新启用指针事件,因为它们的父项将被禁用。

现在的问题是,当您将鼠标悬停在列表中的链接上时,后台悬停将不再被触发。

我希望如此,当您将鼠标悬停在容器内的链接上时,会显示链接悬停(并且href显示在底部),但下面的链接仍显示在其悬停状态中。

以下是示例,请注意当您将鼠标悬停在框内的链接上时,框会停止悬停。

&#13;
&#13;
#listlink {
  height: 100px; width: 100px; top:0; left:0;
  position: absolute;

  background: rgba(255,0,0,0.4);
}

#listlink:hover {  background: rgba(255,0,0,0.8);}

#listitem {
  height: 100px; width: 100px; top:0; left:0;
  position: absolute;
  
  z-index: 10;
  pointer-events: none;
}

#childlink {
  background: rgba(0,0,255,0.4);
  pointer-events: auto;
}
#childlink:hover {  background: rgba(0,0,255,0.8);}
&#13;
<a id="listlink" href="#listlink"></a>
<div id="listitem">
  Text <a id="childlink" href="#childlink">top link</a> text
</div>
&#13;
&#13;
&#13;

1 个答案:

答案 0 :(得分:1)

要实现所需的行为,您可以将整体放在relative容器中,其中包含固定的widthheight,如图所示。并将hover效果应用于#listlink

.container {
  position: relative;
  height: 100px;
  width: 100px;
  background: rgba(255, 0, 0, 0.4);
}
.container:hover {
  background: rgba(255, 0, 0, 0.8);
}
#listlink {
 /* height: 100px;
  width: 100px;*/
  top: 0;
  bottom:0;
  left: 0;
  right:0;
  position: absolute;
  /*background: rgba(255, 0, 0, 0.4);*/
}
/*
#listlink:hover {
  background: rgba(255, 0, 0, 0.8);
}*/

#listitem {
  /* height: 100px;
  width: 100px;*/
  top: 0;
  bottom:0;
  left: 0;
  right:0;
  position: absolute;
  z-index: 10;
  pointer-events: none;
}

#childlink {
  background: rgba(0, 0, 255, 0.4);
  pointer-events: auto;
}

#childlink:hover {
  background: rgba(0, 0, 255, 0.8);
}
<div class='container'>
  <a id="listlink" href="#listlink"></a>
  <div id="listitem">
    Text <a id="childlink" href="#childlink">top link</a> text
  </div>
</div>