1、是什么

pointer-events 直译为指针事件,该属性指定在什么情况下某个DOM可以成为鼠标事件的 target。

简而言之,就是允许/禁止DOM的鼠标事件(click事件、hover事件、mouse事件等鼠标事件)

2、具体属性分析

用法分析:
pointer-events: auto | none | visiblePainted | visibleFill | visibleStroke | visible | painted | fill | stroke | all

  • auto -----默认值,与pointer-events属性未指定时的表现效果相同,对于SVG内容,该值与visiblePainted效果相同

  • none ----- 元素不再是鼠标事件的目标,鼠标不再监听当前层,而去监听下一层中的元素(这里的层指的是图层)。但是如果当前层的子元素设置了pointer-events为其它值,比如auto,鼠标还是会监听这个子元素的。

    这就是穿透点击事件的关键所在!

  • 其它属性都只适用于SVG
    visiblePainted | visibleFillvisibleStrokevisible painted
    fillstroke |all

    3、实际代码使用中案例:

    1. 禁止点击

    2. 图层覆盖覆盖后,底层图层鼠标事件失效时(无法点击),可以通过这个属性来实现,使得点击穿透,来触发底层的鼠标事件。

    4、案例

    4.1、禁止点击案例

    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <style>
    .stopClick {
    pointer-events: none; //元素不再是鼠标事件的目标,禁止当前层的鼠标事件
    }
    </style>
    </head>
    <body>
    <ul>
    <li><a href="https://www.baidu.com/">百度</a> </li>
    <li><a href="http://example.com" class="stopClick">一个不能点击的链接</a></li>
    </ul>
    </body>
    </html>

    第二个a标签不仅无法被点击,而且没有鼠标手形样式

    4.2、点击穿透案例

    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <style>
    .bottom {
    background: yellow;
    width: 100px;
    height: 100px;
    } .top {
    width: 100px;
    height: 100px;
    position: absolute;
    top: 0;
    left: 0;
    z-index: 100;
    display: flex;
    justify-content: center;
    align-items: center;
    /*不再监听当前图层的鼠标事件,而去监听下一层中元素的鼠标事件*/
    pointer-events: none; }
    .top b{
    display:inline-block;
    margin: 0 auto;
    /*子元素修改pointer-events,允许触发鼠标事件*/
    pointer-events:auto;
    }
    </style>
    </head>
    <body>
    <!-- 下方div -->
    <div class="bottom">
    <a href="http://www.baidu.com">下一层--百度</a>
    </div>
    <!-- 上方div -->
    <div class="top" onclick="topSay()">
    <b id="topTxt">顶层</b>
    </div> <script>
    document.getElementById("topTxt").onclick = function(evt){
    alert('顶层内b元素的事件!');
    evt.stopPropagation(); //阻止了事件的向上传播,否则就会触发父容器的alert事件。
    }
    function topSay(){
    alert('顶层事件')
    }
    </script>
    </body> </html>

    分析如下
    原本底层被顶层覆盖,使得底层的百度跳转事件无法被触发。

    但是这里顶层设置了pointer-events: none;,使得顶层的鼠标事件被禁止,浏览器转而去监听下一层的鼠标事件,这就使得百度跳转事件又可以生效了。

    由于顶层内的子元素b继承了顶层的pointer-events: none;,使得b也无法触发鼠标事件,但是,b元素其自身又重新设置了pointer-events:auto;,使得b又可以触发鼠标事件了。

    在b元素的点击事件上,如果不加evt.stopPropagation(),去阻止事件冒泡,通过点击b,也会触发父容器的点击事件

    5、兼容性

      • IE  11+
      • Firefox  3.6+
      • Chrome 4.0+
      • Safari  6.0
      • Opera  15.0
      • iOS Safari 6.0
      • Android Browser 2.1+
      • Android Chrome 18.0+

CSS3 超实用属性:pointer-events (可穿透图层的鼠标事件)的更多相关文章

  1. CSS3 pointer-events属性

    在某个项目中,很多元素需要定位在一个地图层上面,这里就要用到很多绝对定位或者相对定位的元素,但是这样的话,这些浮在上面的div或者其它元素一般都会给个宽高,或者relative的元素可以不给宽高,这个 ...

  2. 浏览器 Pointer Events

    前言 Pointer Events是一套触控输入处理规格,支持Pointer Events的浏览器包括了IE和Firefox,最近Chrome也宣布即将支持该处理规则. PointerEvent Po ...

  3. CSS3基础(4)——CSS3 渲染属性

    一. CSS3 计数器详解    CSS3计数器(CSS Counters)可以允许我们使用CSS对页面中的任意元素进行计数,实现类似于有序列表的功能. 与有序列表相比,它的突出特性在于可以对任意元素 ...

  4. CSS3 圆角属性 border-radius和-webkit-border-radius使用

    CSS3 圆角属性 border-radius 在 CSS3 中新增了一个 border-radius 边框半径属性,即大家常用的圆角效果.这使得制作圆角将不再麻烦,只需对所用对象加一个 border ...

  5. 前端必须要掌握的几个CSS3的属性

    随着Css3和html5的风靡,越来越多的前端人员开始学习Css3,今天的文章就是来说说前端应该掌握10个Css3属性. 1. Border-radius Border-radius是一大堆CSS3属 ...

  6. 高效开发之SASS篇 灵异留白事件——图片下方无故留白 你会用::before、::after吗 link 与 @import之对比 学习前端前必知的——HTTP协议详解 深入了解——CSS3新增属性 菜鸟进阶——grunt $(#form :input)与$(#form input)的区别

    高效开发之SASS篇   作为通往前端大神之路的普通的一只学鸟,最近接触了一样稍微高逼格一点的神器,特与大家分享~ 他是谁? 作为前端开发人员,你肯定对css很熟悉,但是你知道css可以自定义吗?大家 ...

  7. css3 transition属性

    最近打算学习css3知识,觉得css3写出来的效果好炫好酷,之前一直想要学习来着.可能之前的决心,毅力,耐心不够,所以想要重整起来,放下浮躁的心态,一步一个脚印,踏踏实实的来学习. 首先学习的是css ...

  8. CSS3 选择器——属性选择器

    上一节在<CSS3选择器——基本选择器>中主要介绍了CSS3选择器的第一部分,这节主要和大家一起来学习CSS3选择器的第二部分——属性选择器.属性选择器早在CSS2中就被引入了,其主要作用 ...

  9. 使用CSS3各个属性实现小人的动画

    使用CSS3各个属性实现带有音乐小人的动画,完全不使用JS代码: 注:chrome浏览器效果最佳,最终效果静态图: HTML代码如下: <!DOCTYPE html> <html&g ...

  10. css3新增属性API

    写在前面:由于CSS5标准还未完全订下来,所以各种内核的浏览器都有自己的标准,为了不使属性混淆,所以各家在各自标准前加了一个前缀. -moz-  主要是firefox火狐 -webikt-主要是chr ...

随机推荐

  1. 填报表中也可以添加 html 事件

    在实际的项目开发中,填报表的应用十分广泛. 多数情况下,填报表会作为整个项目的一部分配合需求灵活使用,但有时也会受大项目环境的影响,产生一些特别的要求.比如,通常报表单元格的数据类型大多是文本,有时却 ...

  2. sql 语句系列(月份的第一天和最后一天)[八百章之第二十章]

    前言 插播一个,从给定日期值里面提取年月日时分秒. 之所以写这个是因为使用频率太高. mysql: select DATE_FORMAT(CURRENT_TIMESTAMP,'%k') hr, DAT ...

  3. EVA: Visual Representation Fantasies from BAAI

    ​本文做个简单总结,博主不是做自监督领域的,如果错误,欢迎指正. 链接 Code:​ Official:baaivision/EVA MMpretrain:open-mmlab/mmpretrain/ ...

  4. 实训篇-Html-表格练习2

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

  5. redis命令和lua实现分布式锁

    Redis分布式锁关键 SETNX 语法: SETNX key value 如果key不存在,则存储(key:value)值,返回1 如果key已经不存在,则不执行操作,返回0 因为这个命令的性质,多 ...

  6. 力扣183(MySQL)-从不订购的客户(简单)

    题目: 某网站包含两个表,Customers 表和 Orders 表.编写一个 SQL 查询,找出所有从不订购任何东西的客户. Customers 表: Orders 表:  解题思路: 需要查询出没 ...

  7. 19_非单文件名组件中VueComponent构造函数&重要的内置关系

    总结: 关于VueComponent:     1.school组件本质上是一个名为VueComponent的构造函数,且不是程序员定义的,是Vue.extend生成的.     2.我们只需要写&l ...

  8. BladeDISC 0.2.0更新发布

    ​简介:在BladeDISC正式开源三个月后,我们发布了0.2.0版本,该更新包含了大量的性能优化与功能增强. 在BladeDISC正式开源三个月后,我们发布了0.2.0版本,该更新包含了大量的性能优 ...

  9. Apache Flink 在汽车之家的应用与实践

    ​简介: 汽车之家如何基于 Flink 上线了 AutoStream 平台并持续打磨. 本文整理自汽车之家实时计算平台负责人邸星星在 Flink Forward Asia 2020 分享的议题< ...

  10. Go pprof 认知到实践

    快速开始 测试环境:go version go1.22.2 windows/amd64,源代码开源在 https://github.com/oldme-git/teach-study/tree/mas ...