pointer-events: none 的两个应用场景
简介
pointer-events: none 真是个神奇的属性。
该属性有什么用?借用 CSS3 pointer-events:none 应用举例及扩展 的总结来说:
pointer-events: none顾名思义,就是鼠标事件拜拜的意思。元素应用了该 CSS 属性,链接啊,点击啊什么的都变成了 “浮云牌酱油”。pointer-events: none的作用是让元素实体 “虚化”。例如一个应用 pointer-events: none 的按钮元素,则我们在页面上看到的这个按钮,只是一个虚幻的影子而已,您可以理解为海市蜃楼,幽灵的躯体。当我们用手触碰它的时候可以轻易地没有任何感觉地从中穿过去。
大家都知道 input[type=text|button|radio|checkbox] 支持 disabled 属性,可以实现事件的完全禁用。如果其他标签需要类似的禁用效果,可以试试 pointer-events: none
举个简单的例子:
<a href="http://sf.gg" style="pointer-events: none">click me</a>
这个链接,你是点不了的,并且 hover 也没有效果。(值得一提的是,仅仅是鼠标事件失效,用 tab 键还是可以选中该链接的,然后 enter 打开,这个时候可以去掉 a 标签的 href 属性,就不能让 tab 键选中了)
实践一
今天改了一个 众审中心 的 bug。
比如,挖坟帖审核 如果反对通过的话,需要选中理由,如图:

从代码角度上讲,该元素是支持 click 和 hover 的。
众审中心其实有很多子项目,用的是一个模版,但是 标签清理 不一样,它没有勾选理由的功能(理由只是展示),但是因为用的是一套模版代码,所以之前的 bug 就是相似位置也是可点击的,现在要修改为不可点击。

简单看了下,一个 li 标签(其实不管是啥标签啦),直接给它加上 pointer-events: none 完美解决。
如果不这样做,就要从 js 入手,判断响应的模块,去掉 click 事件(标签清理模块特判),然后 CSS 也要修改,hover 效果也要一起去掉(标签清理模块需要另外构造样式)。加上我对这里的代码不熟悉,可能完美解决问题需要花一定的时间。
不得不感叹 pointer-events: none 大法好!
实践二
SegmentFault 5 周年 是前同事 @cheri 在 SF 五周年的时候做的网页,弹幕层用了 canvas 构造,canvas 下面的内容其实是被 canvas 遮住了,无法点击。
这个时候,pointer-events: none 又要闪亮登场啦!还记得前面说的吗,元素应用了 pointer-events: none ,其实就是海市蜃楼啦,任何事件都可以轻易从它身上穿过去!
所以我们给 canvas 加上 pointer-events: none,真正在下面的内容就可以被点击了。
其实类似的例子很多,参考 CSS3 pointer-events 介绍 举的例子:
比如在某个项目中,很多元素需要定位在一个地图层上面,这里就要用到很多绝对定位或者相对定位的元素,但是这样的话,这些浮在上面的 div 或者其它元素一般都会给个宽高,或者 relative 的元素可以不给宽高,这个时候,这些元素就会盖住下面的地图层,以至于地图层无法操作。那么我们就可以给这个 div 设置 pointer-events: none,然后你就会发现下面的地图就可以拖动和点击了。但是悲剧的是,操作区域本身却无法操作了,直接被无视掉了,不过不用担心,我们可以给里面的元素重新设置为 pointer-events:auto,当然,只给需要操作的元素区域设置。
pointer-events: none 的两个应用场景的更多相关文章
- 浏览器 Pointer Events
前言 Pointer Events是一套触控输入处理规格,支持Pointer Events的浏览器包括了IE和Firefox,最近Chrome也宣布即将支持该处理规则. PointerEvent Po ...
- AspectJWeaver文件写入gadget详解和两种应用场景举例
目录 0 前言 1 环境 2 gadget解析 2.1 高版本Commons-Collections的防御措施 2.2 获取AspectJWeaver的调用链 2.3 gadget详解 3 两种应用场 ...
- iOS同一项目多个Target的快速实现方法 - 两种使用场景详解
我们项目中,默认建好是只有一个target的,但是,一些场景中,多target能帮助我们更好的使用项目. 场景1: 同一项目,一般会分不同环境:开发环境.测试环境.正式(生产)环境. 这就涉及到一个请 ...
- Python:lambda表达式的两种应用场景
01 lambda表达式 python书写简单,功能强大, 迅速发展成为 AI ,深度学习的主要语言.介绍Python中的lambda表达式,注意到,它只是一个表达式,不是语句啊. lambda的语法 ...
- 高性能Web服务器Nginx的配置与部署研究(11)应用模块之Memcached模块的两大应用场景
一.应用场景1 最近在一个项目中,用到了Nginx的Memcached模块,所以就在这个系列教程中提前把Memcached模块拿出来写了.另外发现最近我的 博客文章频频被很多用采集器的网站拿走,帮我发 ...
- Jmeter常用的两大性能测试场景
一.阶梯式场景 该场景主要应用在负载测试里面,通过设定一定的并发线程数,给定加压规则,遵循“缓起步,快结束”的原则,不断地增加并发用户来找到系统的性能瓶颈,进而有针对性的进行各方面的系统优化. 使用到 ...
- WPF中的两个绑定场景
1. 如何在诸如ListBox这样的项中绑定父类数据上下文. <ListBox Grid.Row=" ItemsSource="{Binding Entries}" ...
- javascript code snippet -- Forwarding Mouse Events Through Layers
Anyone who has worked with web apps has likely created a masking element at some point, and the grea ...
- ExtJS笔记 Using Events
Using Events The Components and Classes of Ext JS fire a broad range of events at various points in ...
随机推荐
- Java的对象传参问题
在c/c++中对于传参类型,无外乎就是传值.传引用.传指针这几种.但在java中,由于没有指针类型,其传参的方式也发生了相应的变化.之前有搜过相关的知识点一直理解的是:Java的传参方式中主要有两种: ...
- 产品大神1--工具axure
一,axure安装 链接:https://pan.baidu.com/s/1rb3SH5HSogP1k_ARTZTflA 提取码:084p 二,axure8.0的使用 因为下面的文章都已经写的非常详细 ...
- SqlServer卡慢解决办法
SqlServer活动监视器调成1s刷新间隔 查看资源等待 (1)memory(内存)占用高时-->加内存(2)latch(业级锁)(并发量大时产生)-->调整cpu核心数可能解决(不一定 ...
- bootstrap模态框手动关闭遮盖层不消失
模态框中 加载了一个子页面 子页面中调教表单之后想根据执行结果手动关闭模态框,最初尝试了以下几种方案: 1.$("#myModal").modal('hide');//模态框关闭 ...
- Hillstone设备管理-设备软件Stone-OS升级
1.通过sysloader进行StoneOS升级 1)给设备上电按提示按ESC并且进入 Sysloader.参照以下操作提示: 2)在下面选择对应的选项升级os,可以通过tftp.ftp.usb.系统 ...
- c# post方法亲测可用
/// <summary> /// Post接口方法 /// </summary> /// <param name="requestUri">& ...
- Atomikos和GTS-Fescar和TCC-Transaction和TX-LCN分布式事物的比较
什么是分布式事物 分布式系统中保证不同节点之间的数据一致性的事物,叫做分布式事物. 为什么要用分布式事物 微服务,SOA等服务架构模式,一个是service产生多个节点,另一个是resource产生多 ...
- 手工脱壳之FSG压缩壳-IAT表修复
目录 一.工具及壳介绍 二.脱壳 2.1.单步跟踪脱壳 2.2.IAT修复 三.程序脱壳后运行截图 四.个人总结 五.附件 一.工具及壳介绍 使用工具:Ollydbg.PEID.ImportREC.L ...
- java、php、.net关于web开发的区别
一提到web开发,目前在世界上流行性的三个帮派就是php,java和asp.net,这个世界上的百分之99的网站或者类似的应用都是由这三种语言的开发,这里请原谅我忽视某些小众语言如python之类.三 ...
- Oracle 12c 创建新的数据库实例、用户
前提:安装好了Oracle 12c数据库,已有一个数据库实例xe,登录用户/密码:system/oralce 我用的是docker安装的Oracle 12c的实例: docker run --name ...