惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Recent Announcements
Recent Announcements
人人都是产品经理
人人都是产品经理
月光博客
月光博客
博客园 - 三生石上(FineUI控件)
GbyAI
GbyAI
博客园 - 司徒正美
美团技术团队
Vercel News
Vercel News
IT之家
IT之家
U
Unit 42
Y
Y Combinator Blog
罗磊的独立博客
Microsoft Security Blog
Microsoft Security Blog
MongoDB | Blog
MongoDB | Blog
Jina AI
Jina AI
V
Visual Studio Blog
B
Blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
MyScale Blog
MyScale Blog
博客园 - 叶小钗
A
About on SuperTechFans
WordPress大学
WordPress大学
Hugging Face - Blog
Hugging Face - Blog
B
Blog RSS Feed

张鑫旭-鑫空间-鑫生活

1分钟速度了解text-align match-parent声明 « 张鑫旭-鑫空间-鑫生活 光标的形状也能设置了,就是CSS caret-shape属性 « 张鑫旭-鑫空间-鑫生活 pretext与文字四面环绕效果的实现 « 张鑫旭-鑫空间-鑫生活 JSON.rawJSON方法的作用是什么? « 张鑫旭-鑫空间-鑫生活 如何使用CSS判断鼠标从哪个方向进入元素? « 张鑫旭-鑫空间-鑫生活 借助mediabunny纯JS实现视频水印、剪裁、合成等功能 « 张鑫旭-鑫空间-鑫生活 务必谨慎使用JS WeakRef弱引用 « 张鑫旭-鑫空间-鑫生活 CSS六边形头像的实现与蜂巢布局 « 张鑫旭-鑫空间-鑫生活 CSS corner-shape与背景底纹技术 « 张鑫旭-鑫空间-鑫生活 浅学WebTransport API:下一代Web双向通信技术 « 张鑫旭-鑫空间-鑫生活 HTML dialog元素新支持了closedBy属性 « 张鑫旭-鑫空间-鑫生活 HTML interestfor属性与悬停popover交互效果 « 张鑫旭-鑫空间-鑫生活 CSS3模拟window7炫酷界面效果展示 « 张鑫旭-鑫空间-鑫生活 图片旋转+剪裁js插件(兼容各浏览器) « 张鑫旭-鑫空间-鑫生活 纯js无图片无外链CSS图片幻灯片播放插件 « 张鑫旭-鑫空间-鑫生活 CSS border三角、圆角图形生成技术简介 « 张鑫旭-鑫空间-鑫生活 CSS “渐进增强”在web制作中常见应用举例 « 张鑫旭-鑫空间-鑫生活 让IE6/IE7/IE8浏览器支持CSS3属性 « 张鑫旭-鑫空间-鑫生活 jQuery – 高亮动态显示页面HTML代码插件 « 张鑫旭-鑫空间-鑫生活 翻译 – 逐渐消失的Flash网站 « 张鑫旭-鑫空间-鑫生活 CSS reset的重新审视 – 避免样式重置 « 张鑫旭-鑫空间-鑫生活 新浪微博插入话题后部分文字选中的js实现 « 张鑫旭-鑫空间-鑫生活 JavaScript实现http地址自动检测并添加URL链接 « 张鑫旭-鑫空间-鑫生活 CSS实现兼容性的渐变背景(gradient)效果 « 张鑫旭-鑫空间-鑫生活 CSS content内容生成技术以及应用 « 张鑫旭-鑫空间-鑫生活 CSS gradient渐变之webkit核心浏览器下的使用 « 张鑫旭-鑫空间-鑫生活 CSS渐变之CSS3 gradient在Firefox3.6下的使用 « 张鑫旭-鑫空间-鑫生活 区分IE8/IE7/IE6及其他浏览器-CSS “\9″hack « 张鑫旭-鑫空间-鑫生活 CSS实现跨浏览器兼容性的盒阴影效果 « 张鑫旭-鑫空间-鑫生活 CSS3&HTML5各浏览器支持情况一览表 « 张鑫旭-鑫空间-鑫生活
告别pointer-events:none使用HTML inert属性真正禁用 « 张鑫...
张鑫旭,zhangxinxu · 2022-10-20 · via 张鑫旭-鑫空间-鑫生活

by zhangxinxu from https://www.zhangxinxu.com/wordpress/?p=10597 鑫空间-鑫生活
本文欢迎分享与聚合,全文转载就不必了,尊重版权,圈子就这么大,若急用可以联系授权。

点击,鼠标,手形,封面

一、过去的禁用

过去的禁用一般使用下面两种方法。

1. disbaled属性

这个只适用于表单元素,例如一个输入框设置disabled属性,就不能输入,click点击事件也不会执行,表单submit提交的时候,对应的数据也不会带过去。

<input name="author" value="zhangxinxu" disabled>

实时效果:

对于诸如<div><p><a>这些元素并不管用。

不过设置了disabled属性的元素对于hover等交互行为并未阻止,因为类似原生的title提示,或者自定义的tips提示都是可以作用在被禁用的按钮等表单元素上的(见下图),算是一个不错的优点。

禁用提示

相比之下,设置了pointer-events:none的元素的就无法实现这样的交互。

2. pointer-events:none禁用

pointer-events:none禁用是阻止鼠标行为,包括点击,悬停等交互。

但是并不能阻止键盘访问,例如下面的输入框依然可以被键盘访问,并输入内容。

<input name="author" value="zhangxinxu" style="pointer-events:none">

因此,pointer-events:none其实并不是真正意义上的禁用。

其优点在于适用于任何元素,特别适合实现可穿透的各类覆盖层。

下面问题来了,有没有那种使用于任何元素,连键盘行为也能彻底禁用的实现方法呢?

有,就是本文要重点介绍的inert属性。

二、更为彻底的inert属性

inert这个单词的意思是无活动能力的、无行动力的、惰性的、不活泼的。

设置了inert属性对元素就好像从页面中蒸发了一样,虽然肉眼可见(样式没有任何变化),但是你的任何操作都是无效的。

在过去,我们希望让表单内的所有控件都禁用,需要借助使用<fieldset>元素,详见“如何disabled禁用所有表单input输入框元素”一文。

现在,多了个选择,就是使用inert属性,例如:

<form inert>   
    <label for="zxx" title="作者">作者:</label>
    <input name="author" id="zxx" value="zhangxinxu" required>
    <p>
        <button type="submit">提交</button>
    </p>
</form> 

此时,整个表单元素,包括文字在内,不能点,不能戳,也不能动。

木头人游戏

您可以狠狠地点击这里:HTML inert属性禁用form表单demo

disabled 属性不同,inert属性不会对元素的样式进行任何设置,因此,如果不做任何 CSS 设置,用户在视觉上是无法感知这个表单是被禁用的。

此时,我们可以使用CSS属性选择器进行匹配,并设置的对应样式,例如:

form[inert] {
    filter: grayscale(1) opacity(0.6);
}

此时,表单的样子就是下图这样:

表单禁用效果

也不是完美的

inert属性下的禁用虽然强大,但如果用户希望知道禁用的原因(例如hover提示),就不太好处理,因为任何交互无法触发。

以及,内部元素是否被禁用,不如disabled属性判断方便,因为disabled禁用有专门的:enabled:disabled进行匹配,哪怕disabled属性设置在外面的<fieldset>元素上。

但是inert属性禁用的判断就不方便,只能使用属性选择器:

[inert] .my-class {}

三、关于兼容性等

随着Firefox 108支持了HTML inert属性,现在,所有的现代浏览器都已经支持了这个禁用超彻底的神属性。

inert兼容性截图

如果您的产品对兼容性要求比较高,这个属性也不是不能使用,引入对应的polyfill就可以了。

见此项目:https://github.com/WICG/inert

我大致看了下,禁用鼠标行为,禁用框选,然后通过设置tabindex=-1禁用键盘访问等。

[inert] {
  pointer-events: none;
  cursor: default;
}

[inert], [inert] * {
  user-select: none;
  -webkit-user-select: none;
  -moz-user-select: none;
  -ms-user-select: none;
}

tabindex=-1示意

噢啦,以上就是本文的全部内容,感谢您的阅读。

行为匆忙,若有错误在所难免,欢迎指正,也欢迎,如果您觉得写得还不错的话。

本文为原创文章,欢迎分享,勿全文转载,如果实在喜欢,可收藏,永不过期,且会及时更新知识点及修正错误,阅读体验也更好。
本文地址:https://www.zhangxinxu.com/wordpress/?p=10597

(本篇完)