CSS中有`pointer-events:hoverOnly`或类似内容?

Jim*_*ery 78 html css pointer-events

刚刚pointer-events在CSS中玩过属性.

我有一个div我希望对所有鼠标事件都不可见,除了:hover.

所以所有点击命令都会通过div它下面的命令,但是div可以报告鼠标是否在它上面.

任何人都可以告诉我是否可以这样做?

HTML:

<div class="layer" style="z-index:20; pointer-events:none;">Top layer</div>
<div class="layer" style="z-index:10;">Bottom layer</div>
Run Code Online (Sandbox Code Playgroud)

CSS:

.layer {
    position:absolute;
    top:0px;
    left:0px;
    height:400px;
    width:400px;
}
Run Code Online (Sandbox Code Playgroud)

Сво*_*Роб 82

仅悬停.这很容易.没有JS ...也防止链接默认操作.

a:hover {
	color: red;
}
a:active {
	pointer-events: none;
}
Run Code Online (Sandbox Code Playgroud)
<a href="www.google.com">Link here</a>
Run Code Online (Sandbox Code Playgroud)

编辑:IE 11及以上版本支持 http://caniuse.com/#search=pointer-events

  • 这确实"有效" - 但它不允许点击下面的元素(至少当该元素是YouTube视频时) - 这可能是任何人首先需要这种行为的唯一原因 (17认同)
  • 这是美丽的 (3认同)
  • @claudekennilol 这个问题的字面意思是“所以所有的点击命令都会通过 div 到达它下面的那个”。这正是他们**想要的!我只提到 YouTube 作为我测试过的例子。听起来最初的提问者希望指针事件充当事件的过滤器,但我认为它不能做到。无论如何,这是 5 年前的事了 - 我希望您今天能找到解决这个问题的方法。 (3认同)
  • 这在Firefox中似乎不起作用 (2认同)
  • @PriyanshuJain如果用户点击按钮,您认为会发生什么? (2认同)
  • @Simon_Weaver 说有人需要此功能的唯一原因是单击 YouTube 视频,或者更一般地说,单击元素下方的某些内容,这是非常短视的。很可能有人想要这种行为,以便通常可点击的元素_不可_​​点击。 (2认同)
  • @Simon_Weaver 你是绝对正确的,这个解决方案不是我想要的。我觉得其他人在批评你之前不阅读我的问题是短视的。 (2认同)

Nie*_*sol 22

"窃取"Xanco的答案,但没有那个丑陋,丑陋的jQuery.

代码段:注意DIV的顺序相反

.layer {
  position: absolute;
  top: 0px;
  left: 0px;
  height: 400px;
  width: 400px;
}

#bottomlayer {
  z-index: 10
}

#toplayer {
  z-index: 20;
  pointer-events: none;
  background-color: white;
  display: none
}

#bottomlayer:hover~#toplayer {
  display: block
}
Run Code Online (Sandbox Code Playgroud)
<div id="bottomlayer" class="layer">Bottom layer</div>
<div id="toplayer" class="layer">Top layer</div>
Run Code Online (Sandbox Code Playgroud)

  • 这如何解决这个问题?OP 要求单击命令来浏览最初可见的元素。在您的解决方案中,他们没有,请注意“顶层”文本如何无法突出显示...... (3认同)
  • 抱歉,我还是使用丑陋的jQuery。但是请支持仅CSS解决方案! (2认同)

Xan*_*nco 11

我认为单凭CSS无法实现您的目标.但是,正如其他贡献者所提到的,在JQuery中做起来很容易.这是我如何做到的:

HTML

<div id="toplayer" class="layer" style="z-index:20; pointer-events:none; background-color: white; display: none;">Top layer</div><div id="bottomlayer" class="layer" style="z-index:10;">Bottom layer</div>
Run Code Online (Sandbox Code Playgroud)

CSS(未更改)

.layer {
    position:absolute;
    top:0px;
    left:0px;
    height:400px;
    width:400px;
}
Run Code Online (Sandbox Code Playgroud)

JQuery的

$(document).ready(function(){
    $("#bottomlayer").hover(
        function() {
            $("#toplayer").css("display", "block");
        },
        function() {
            $("#toplayer").css("display", "none");
        }
    );
});
Run Code Online (Sandbox Code Playgroud)

这是JSFiddle:http://www.jsfiddle.net/ReZ9M


mac*_*atu 5

您还可以检测到不同元素上的悬停并将样式应用于其子元素,或使用其他css选择器(例如相邻的子元素等)。

这取决于您的情况。

在父元素上悬停。我这样做:

.child {
    pointer-events: none;
    background-color: white;
}

.parent:hover > .child {
    background-color: black;
}
Run Code Online (Sandbox Code Playgroud)