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. 鸿蒙HarmonyOS实战-ArkUI组件(页面路由)

    一.路由导航 路由导航是指在应用程序中通过路径导航定位到特定页面的过程.路由导航的实现通常采用路由器(router)来进行管理,路由器根据路径的不同值将用户请求导向到不同的页面. 在HarmonyOS ...

  2. 错误 内存溢出 vendor/composer/autoload_real.php on line 66

    前言 首先声明我没怎么写过php,只是当时室友做php的时候跟他一起学了几分钟. 有时候部署一些php项目的时候,发生一些错误,但是百度一下五花八门的. 这个错误的完整版是: Fatal error: ...

  3. 使用纯c#在本地部署多模态模型,让本地模型也可以理解图像

    之前曾经分享过纯c#运行开源本地大模型Mixtral-8x7B 当时使用的是llamasharp这个库和Mixtral的模型在本地部署和推理,前段时间我看到llamasharp更新到了0.11.1版本 ...

  4. EasyCV带你复现更好更快的自监督算法-FastConvMAE

    简介: 近期FastConvMAE工作在EasyCV框架内首次对外开源,本文将重点介绍ConvMAE和FastConvMAE的主要工作,以及对应的代码实现,最后提供详细的教程示例如何进行FastCon ...

  5. Let's Fluent:更顺滑的MyBatis

    简介: 只需瞅一眼Google Trends上全球Java界最热门的两款SQL映射框架近一年的对比数字,就不难了解其实力分布:在此领域,MyBatis早已占领东亚地区开发者市场,并以绝对优势稳居中国最 ...

  6. iOS App 启动优化

    ​简介: 作为程序猿来说,"性能优化"是我们都很熟悉的词,也是我们需要不断努⼒以及持续进⾏的事情:其实优化是⼀个很⼤的课题,因为细分来说的话有⼤⼤⼩⼩⼗⼏种优化⽅向 ,但是切忌在实 ...

  7. 带你体验云原生场景下 Serverless 应用编程模型

    ​简介: 阿里云 Knative 基于 ASK 之上,在完全兼容社区 Knaitve 的同时对 FC.ECI 工作负载进行统一应用编排,支持事件驱动.自动弹性,为您提供统一的 Serverless 应 ...

  8. 庖丁解牛-图解MySQL 8.0优化器查询解析篇

    ​简介: SQL优化器本质上是一种高度抽象化的数据接口的实现,经过该设计,客户可以使用更通用且易于理解的SQL语言,对数据进行操作和处理,而不需要关注和抽象自己的数据接口,极大地解放了客户的应用程序. ...

  9. [FAQ] VisualStudio, Source file requires different compiler version (current compiler is 0.6.1+cxxxxxx)

    当使用的 Solidity 库文件中 pragma 指定的 版本 与本地编译器的使用版本不一致时,会出现这类提示. 解决方式是菜单栏 View -> Extensions -> Exten ...

  10. SemanticFunction 融合 LLM 和传统编程

    本文将继续和大家介绍 SemanticKernel 神奇的魔法,将使用 LLM 大语言模型编写的自然语言函数和传统的编程语言编写的函数融合到一起的例子.通过本文的例子,大家可以看到 SemanticK ...