pointer-events属性

       改项目的时候遇到了一个问题,给页面加了一个按钮,并且给这个按钮添加了 hover { cursor: pointer;} 属性,但是当鼠标移到这个按钮上的时候发现hover并没有起作用,于是又给这个按钮添加了一个点击事件输出console.log(‘点击到了’),想看看这个按钮点击有没有效果,结果不出所料,点击事件也没有生效。

       于是乎我开始网页检查调样式,一直以为是父元素的层级把此按钮给覆盖住了(父元素的背景色是透明的,并且父元素中有z-index=999),就把父元素的z-index取消,给这个按钮设置z-index=9999,结果所想显示的样式还是不生效。然后我开始找博客,z-index为何不起作用?有三种情况:

1、父标签 position属性为relative;

2、问题标签无position属性(不包括static);

3、问题标签含有浮动(float)属性。

对于上述情况的解决办法有三个:


1、position:relative改为position:absolute;

2、浮动元素添加position属性(如relative,absolute等);

3、去除浮动。

我又仔细看了一下我项目的代码,我的代码并没有出现这三个问题中的任何一个,整个人的头都大了!这时我看到了一行关键的CSS代码!

pointer-events: none;

pointer-events是CSS3的一个属性,指定在什么情况下元素可以成为鼠标事件的target(包括鼠标的样式),它的属性有很多值,但是对于浏览器来说,只有auto和none两个值可用。剩下的值都是针对于SVG的。

  • pointer-events:auto——效果和没有定义pointer-events属性相同,鼠标不会穿透当前层。在SVG中,该值和visiblePainted的效果相同。

  • pointer-events:none——元素永远不会成为鼠标事件的target(目标)。但是,当其后代元素的pointer-events属性指定其他值时,鼠标事件可以指向后代元素,在这种情况下,鼠标事件将在捕获或冒泡阶段触发父元素的事件侦听器。实际上默认就可以穿透当前层,因为pointer-events默认为auto。

结合 非常有用的pointer-events属性 这篇文章中的例子,终于了解我代码中父元素用了pointer-events:none,所以父元素永远不是鼠标事件的目标,于是就把我写的按钮的hover样式和click事件给禁用了,这也就是为什么我添加z-index也不管用的原因。要想让在父元素中的按钮成为鼠标事件的目标,只需要给按钮样式中添加pointer-events:auto就可以了。

 

完美解决!简单的问题让我这个前端小白暴风哭泣o(╥﹏╥)o

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值