CSS3 超实用属性:pointer-events (可穿透图层的鼠标事件)
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|visibleFill|visibleStroke|visiblepaintedfill|stroke|all3、实际代码使用中案例:
禁止点击
图层覆盖覆盖后,底层图层鼠标事件失效时(无法点击),可以通过这个属性来实现,使得点击穿透,来触发底层的鼠标事件。
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 (可穿透图层的鼠标事件)的更多相关文章
- CSS3 pointer-events属性
在某个项目中,很多元素需要定位在一个地图层上面,这里就要用到很多绝对定位或者相对定位的元素,但是这样的话,这些浮在上面的div或者其它元素一般都会给个宽高,或者relative的元素可以不给宽高,这个 ...
- 浏览器 Pointer Events
前言 Pointer Events是一套触控输入处理规格,支持Pointer Events的浏览器包括了IE和Firefox,最近Chrome也宣布即将支持该处理规则. PointerEvent Po ...
- CSS3基础(4)——CSS3 渲染属性
一. CSS3 计数器详解 CSS3计数器(CSS Counters)可以允许我们使用CSS对页面中的任意元素进行计数,实现类似于有序列表的功能. 与有序列表相比,它的突出特性在于可以对任意元素 ...
- CSS3 圆角属性 border-radius和-webkit-border-radius使用
CSS3 圆角属性 border-radius 在 CSS3 中新增了一个 border-radius 边框半径属性,即大家常用的圆角效果.这使得制作圆角将不再麻烦,只需对所用对象加一个 border ...
- 前端必须要掌握的几个CSS3的属性
随着Css3和html5的风靡,越来越多的前端人员开始学习Css3,今天的文章就是来说说前端应该掌握10个Css3属性. 1. Border-radius Border-radius是一大堆CSS3属 ...
- 高效开发之SASS篇 灵异留白事件——图片下方无故留白 你会用::before、::after吗 link 与 @import之对比 学习前端前必知的——HTTP协议详解 深入了解——CSS3新增属性 菜鸟进阶——grunt $(#form :input)与$(#form input)的区别
高效开发之SASS篇 作为通往前端大神之路的普通的一只学鸟,最近接触了一样稍微高逼格一点的神器,特与大家分享~ 他是谁? 作为前端开发人员,你肯定对css很熟悉,但是你知道css可以自定义吗?大家 ...
- css3 transition属性
最近打算学习css3知识,觉得css3写出来的效果好炫好酷,之前一直想要学习来着.可能之前的决心,毅力,耐心不够,所以想要重整起来,放下浮躁的心态,一步一个脚印,踏踏实实的来学习. 首先学习的是css ...
- CSS3 选择器——属性选择器
上一节在<CSS3选择器——基本选择器>中主要介绍了CSS3选择器的第一部分,这节主要和大家一起来学习CSS3选择器的第二部分——属性选择器.属性选择器早在CSS2中就被引入了,其主要作用 ...
- 使用CSS3各个属性实现小人的动画
使用CSS3各个属性实现带有音乐小人的动画,完全不使用JS代码: 注:chrome浏览器效果最佳,最终效果静态图: HTML代码如下: <!DOCTYPE html> <html&g ...
- css3新增属性API
写在前面:由于CSS5标准还未完全订下来,所以各种内核的浏览器都有自己的标准,为了不使属性混淆,所以各家在各自标准前加了一个前缀. -moz- 主要是firefox火狐 -webikt-主要是chr ...
随机推荐
- B端架构升级之路
一.背景 随着B端业务快速发展,系统愈趋复杂.我们发起了B端架构升级专项,基于B端业务的特点,从研发规范建设.B端架构基建.系统架构升级和落地保障等多方面提升了B端的架构水平. 二.升级思路 架构是一 ...
- Centos 8.0 minimal命令行安装图形化界面(超详细)
Centos 8.0 安装图形化界面(超详细) 开始之前呢,请先查看您的Centos版本和是否有root账户权限. 一.安装Centos 图形化界面并重启 下载安装图形化界面 执行命令 yum gro ...
- sql 语句系列(每个季度的开始日期和结束日期)[八百章之第二十二章]
前言 基本上统计财务一定会用到. mysql select QUARTER(ADDDATE(y.dy,-1)) QTR, DATE_ADD(y.dy,INTERVAL -3 MONTH) Q_star ...
- redis 简单整理——redis 的字符串基本结构和命令[二]
前言 简单介绍一下redis的基本结构和命令. 正文 redis有5种基本结构: 字符串 哈希 列表 集合 有序集合 那么就来看下其基本命令吧. 通用命令键: keys * 查看全部键,一般不怎么用. ...
- js es6 介绍set,WeakSet
前言 介绍一下es6 的set 和 weakset 正文 set ES6 提供了新的数据结构 Set.它类似于数组,但是成员的值都是唯一的,没有重复的值. Set 本身是一个构造函数,用来生成 Set ...
- 单点登录(SSO)实现详解!!!
单点登录是什么?你是怎么理解的?单点登录是如何实现的 普通登录 提到单点登录,首先可以想到传统登录,通过登录页面根据用户名查询用户信息,判断密码是否正确,正确则将用户信息写到session,访问的时候 ...
- KubeOperator技术方案
KubeOperator技术方案 总体介绍︎ KubeOperator 是一个开源的轻量级 Kubernetes 发行版,专注于帮助企业规划.部署和运营生产级别的 Kubernetes 集群. Kub ...
- vue 插件(swiper)使用
两种方法: 1... 打开https://www.swiper.com.cn/download/index.html 下载css,js... 把js,css引入public里面的index.html文 ...
- 【笔记】greatest/least函数&Round函数
刷了一下力扣,发现有很多的函数是自己不清楚的,用了这些函数是比较容易得出结果的,不用自己费心去实现一些奇怪的东西 1.最大最小值 链接:https://leetcode.cn/problems/num ...
- 力扣603(MySQL)-连续空余座位(简单)
题目: 几个朋友来到电影院的售票处,准备预约连续空余座位. 你能利用表 cinema ,帮他们写一个查询语句,获取所有空余座位,并将它们按照 seat_id 排序后返回吗? 对于如上样例,你的查询语句 ...