在以下设置中,为什么click事件(以及任何其他指针事件)不会被触发?
如果您移除opacity: 0.5
行,它就可以正常工作。
对于子孙后代,如果jsFiddle一直下降(12月21日 接近):
HTML:
<div>
<a>Click</a>
<p>Paragraph</p>
</div>
CSS:
div { position: relative; margin: 40px; }
a { position: absolute; top: 0; right: 0; }
p { opacity: 0.5; }
JS:
$(document).ready(function(event) {
$("a").click(function(event) {
alert("Alert");
});
});
(在最新稳定的Chrome和Firefox中测试)
答案 0 :(得分:5)
“由于不透明度小于1的元素是从单个屏幕外图像合成的,因此其外部的内容无法分层 内部内容之间的z顺序。出于同样的原因, 实现必须为任何元素创建新的堆栈上下文 不透明度小于1的情况。如果不透明度小于1的元素是 没有定位,实现必须绘制它创建的图层, 在其父堆叠上下文中,以相同的堆叠顺序 如果它是
z-index: 0
和opacity: 1
的定位元素,则会被使用<p>
...“
http://www.w3.org/TR/css3-color/#transparency
修改:
此外,您的特定示例的<a>
元素与<a>
重叠。
因此,您可以通过移动z-index
以使其不会干扰,或使用{{1}}重新调整堆叠顺序来解决此问题。后一个选项可能有跨浏览器问题,但我没有测试过。我建议重新分解HTML,以便这两个元素不会相互重叠。
编辑2 :
这是一个相关的SO问题,但是接受的答案是错误的。
答案 1 :(得分:2)
你可能会理解这一行
不透明度CSS属性指定元素的透明度,即元素背后的背景覆盖的程度。
使用值不同于1的此属性会将元素置于新的堆叠上下文中。
此处p
重叠a
,因此请将p
的宽度设置为不重叠a
或将a
设置为更高z-index
< / p>
答案 2 :(得分:-1)
a
元素出现在p
之前,请注意p
是100%宽。这意味着p
实际上已超出a
。
您可以将a
元素的z-index更改为大于0(http://jsfiddle.net/523ve/5/)或在HTML中交换p
和a
因此a
位于p
之后(http://jsfiddle.net/523ve/3/)。
我希望我所写的内容有意义;)。