在我的记忆中pointer-events就是用来进行事件穿透的,也就是说,如果给父元素设置了pointer-events:none,那么父元素不再监听鼠标事件事件(类似于touch,click这样的)。

需要这样做的情况,通常是我们想“穿透”父层,直接点击子元素时,父元素会当作什么也没有发生一样。这是我以前的知识体系中所收集的信息。现在看来也没有错,只是这不完整。

它是有副作用的,或者说,上面的知识应用是有条件的。当我们在属于父子关系的元素上应用这个(pointer-events:none)属性,确实是这个行为,但是如果当我们作用在平行层的两个块元素上的时候,它还是这样子吗?

这个问题就是由上面这个截图所示的应用所引出的。我稍后在给出简化的原型。先简单介绍一下这个场景演示的问题。上图其实是有四个层的:

作为页面容器的page层以及page下面的花花草草所组成的子层,为了后面的演示方便,取名为pagesub层。

另一层是用来进行左右翻页的按钮层,这一层和page层是并列的,取名为float层,因为看起来像是浮在page上面。float层下面有一个叫floatsub层,用来包装小蘑菇按钮。

我希望点击小蘑菇的时候,不会触发float层上的事件,于是我给float层加上了pointer-events:none;那么问题来了,现在我点小蘑茹没有反应。经过监听,发现点到的是page里边的花花草草层。我百思不得其姐,经过一翻激烈的追求,终于得到真爱。下面我就公布这一充满曲折的求姐过程:

pagesub是page的子元素,floatpage是float 的子元素,它们的位置关系如上图所示。其中绿色的page就是页面层,蓝色的pagesub就是花花草草层。红色的float就是按钮层

灰色的float page就是蘑菇层。(色盲的朋友看文字就好了)

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
<style type="text/css">
body {
text-align: center;
}
.page {
position: absolute;
top : 0;
left:0;
height: 400px;
background-color: green;
width:500px;
z-index: 2;
} .float {
width: 400px;
height: 200px;
position: absolute;
top:50px;
left: 50px;
z-index: 3;
pointer-events:none;
background-color: red;
} .pagesub {
width: 90%;
height: 60%;
position: absolute;
top:30px;
left: 10px;
z-index: 4;
background-color: blue;
color:white;
} .floatsub {
width:80%;
height: 60%;
position: absolute;
top:33px;
left:44px;
background-color: gray;
z-index: 4;
color: white;
}
</style>
</head>
<body> <div class="page">
page
<div class="pagesub">
pagesub
</div>
</div> <div class="float">
float
<div class="floatsub">
float page
</div>
</div>
</body>
</html>

根据上面的源码,在chrome中进行调式,发现,当我在float page(灰色)层查看元素的时候,居然显示是蓝色的pagesub层。简直没有天理了,有图有真相:

但是当我试着把pointer-events这个属性去掉的时候,奇迹出现了,一切回归预期。这是为什么呢?说明pointer-events 会影响绝对定位的层及关系!当然,前提条件是并列关系,而不是父子关系。在并列关系的元素上使用pointer-events,会造成后面的元素被忽视掉。

注意我这里说的“绝对定位的层及关系” 是指看起来像是用了pointer-events:none属性的元素跑到没有用的元素的后面去了,而至于底层是不是真的发生了这样的情况,我没法去证实,但是测试的结果表明就是这样的现象。

除了none之外,顺道提一下pointer-events:的其它几个属性;

  • auto------- 默认值,鼠标不会穿透当前层
  • 针对SVG的: visiblePainted*visibleFill*visibleStroke*visible*,painted*fill*stroke*all*

好了,本次分享就到这里了,发贴辛苦!

关于css中pointer-events属性的怪异行为的更多相关文章

  1. CSS 中关于background 属性功能

    background 是 css中的核心属性,我们对他应该充分了解. background-image   定义背景图像  这个属性是我们用的最多的属性 设置背景图像有两个方式 background: ...

  2. Css中的Position属性

    Css中的Position属性 Css属性在线查询地址: http://www.css88.com/book/css/properties/index.htm CSS 中的 position 属性 在 ...

  3. css中background背景属性概

    css中background背景属性概 background:url(背景图片路径)  no-repeat;/*不重复默认在左上方*/background:url(背景图片路径)  no-repeat ...

  4. CSS中的display属性

    CSS中的display属性 display:block是可以把非块级元素强制转换为块级元素显示,如内嵌元素span,原来不支持设置宽高,宽度是由内容撑开的,几个span元素是在同一行内的,如果给sp ...

  5. 举例详解CSS中的cursor属性

    这篇文章主要举例介绍了CSS中的cursor属性,包括zoom-in/zoom-out和grab/grabbing等常用属性值的使用,需要的朋友可以参考下 一.开篇之言 CSS3的领域范围已经渗透到了 ...

  6. 深入理解css中的margin属性

    深入理解css中的margin属性 之前我一直认为margin属性是一个非常简单的属性,但是最近做项目时遇到了一些问题,才发现margin属性还是有一些“坑”的,下面我会介绍margin的基本知识以及 ...

  7. 理解与应用css中的display属性

    理解与应用css中的display属性 display属性是我们在前端开发中常常使用的一个属性,其中,最常见的有: none block inline inline-block inherit 下面, ...

  8. css中的列表属性

    list-style-type设定引导列表的符号类型,可以设置多种符号类型,值为disc.circle.square等 list-style-image使用图像作为定制列表的符号 list-style ...

  9. CSS中的!important属性用法

    关于CSS的运用技巧有很多, 今天主要探讨一下CSS中 !important 这个属性的用法.在CSS的使用中,遇到最多的问题就是不同浏览器之间的兼容问题. 由于IE并不严格执行W3C标准, 而又几乎 ...

  10. CSS中的display属性(none,block,inline,inline-block,inherit)

    css中的display属性(none,block,inline,inline-block,inherit) display属性是我们在前端开发中常常使用的一个属性,其中,最常见的有: none bl ...

随机推荐

  1. Linux下Nano命令使用指南

    1.什么时候用nano? 一般网络很卡,ssh时一用vim/vi 就死窗口,或者死机的情况 2.如何使用?   打开或新建文件 #nano 文件名    禁用自动换行 #nano -w /etc/fs ...

  2. java反射技术详解

    反射: 其实就是动态的从内存加载一个指定的类,并获取该类中的所有的内容. 反射的好处:大大的增强了程序的扩展性. 反射的基本步骤: 1. 获得Class对象,就是获取到指定的名称的字节码文件对象. 2 ...

  3. 项目 "Model" 受源代码管理。向源代码管理注册此项目时出错。建议不要对此项目进行任何更改。

  4. laravel 生成验证码的方法

    在Laravel中有很多图片验证码的库可以使用,本篇介绍其中之一:gregwar/captcha,这个库比较简单,在Laravel中比较常用.下面我们就来介绍下使用细节: 首先, composer.j ...

  5. Jmeter之参数化

    Jmeter参数化分为两类,一类是在badboy录制脚本时进行参数化,二是再Jmeter里进行参数化 一:badboy录制脚本时进行参数化的步骤 1.脚本录制成功后->在左下角,点击variab ...

  6. 微软开源 WCF 分布式服务框架,并入 .NET 基金会项目

    微软北京时间2015.5.20 在其 .NET Foundation GitHub 开源项目页中开放了 WCF 分布式服务框架的代码.WCF突然之间成为一个热门话题,在各大网站上都有不同的报道:dot ...

  7. 【腾讯Bugly干货分享】微信小程序开发思考总结——腾讯“信用卡还款”项目实践

    本文来自于腾讯bugly开发者社区,未经作者同意,请勿转载,原文地址:http://dev.qq.com/topic/58212d0fa7a7574c4f4cc3c5 作者:peggy 小程序概述 1 ...

  8. python自动化测试(4)-使用第三方python库技术实现

    python自动化测试(4)-使用第三方python库技术实现 1   概述 关于测试的方法论,都是建立在之前的文章里面提到的观点: 功能测试不建议做自动化 接口测试性价比最高 接口测试可以做自动化 ...

  9. ASP.Net MVC开发基础学习笔记:五、区域、模板页与WebAPI初步

    一.区域—麻雀虽小,五脏俱全的迷你MVC项目 1.1 Area的兴起 为了方便大规模网站中的管理大量文件,在ASP.NET MVC 2.0版本中引入了一个新概念—区域(Area). 在项目上右击创建新 ...

  10. 关于分工的思考 (Thoughts on Division of Labor)

    Did you ever have the feeling that adding people doesn't help in software development? Did you ever ...