CSS的一些常用样式,如背景、文字、文本、表格、列表等,以及一些常用的场景,如居中对齐、溢出、隐藏元素等。01、常用样式 1.1、background背景 设置元素背景的样式 background,更
顺晟科技
2022-10-19 12:58:12
140
欢迎关注我的公众号:前端侦探
介绍一个全新的、和用户行为息息相关的属性:inert
。
HTMLElement.inert - Web APIs | MDN (mozilla.org)
有了这个属性,可以更加轻易地控制很多交互行为,花几分钟了解一下吧
inert
是 HTMLElement 的一个布尔属性,意为"惰性",简单来说,可以禁用一切交互,包括鼠标点击、选中、拖拽、键盘操作等等,举个例子
<div inert>
<p>`inert`是 HTMLElement 的一个布尔属性,意为"惰性",简单来说,可以禁用一切交互</p>
<a href="/link">link</a>
<button>button1</button>
<button>button2</button>
</div>
下面是实际效果
可以看到,添加了inert
属性后,整个元素无法进行任何交互,就好像整个 DOM 都被冻结了一样,所以理解成“冻结”,可能会更好一些
你也可以查看线上demo:html inert (codepen.io)或者html inert (runjs.work)
另外,inert
是一个布尔类型的属性,就是和平时见到的disabled
、hidden
等一致,只要有这个属性,就表示为true
,不存在才是false
<!--以下都为true-->
<div inert>...</div>
<div inert="true">...</div>
<div inert="false">...</div>
<!--以下才是false-->
<div>...</div>
这个需要注意一下
一个新的属性,总会联想到一些实际应用场景,下面介绍两个案例
a
链接的禁用在过去,要禁用一个a链接
可能会这样
a{
pointer-events: none;
}
但是,这样只是阻止了鼠标点击行为,键盘还是可以focus
到的,为了阻止键盘事件,还需要添加tabindex=-1
<a tabindex="-1" href="/xxx"></a>
这样键盘就不会聚焦到a链接
上了
除此之外,还有一种更为暴力的方案,直接去除a
的href
属性
a.href = ''
这样去除之后,a
就仅仅是一个普通的标签了,也不会被聚焦到了。不过这个方案需要在某处保留a
原有的href
属性,以便后续还原。
如果用inert
属性,直接就可以实现全方位的禁用了
<a inert href="/xxx"></a>
还可以通过[inert]
属性自定义样式
a[inert]{
opacity: .5
}
这样在视觉上可以更好地区分哪些部分是禁用的
当然,不仅仅是a
链接,其他任何元素都可以用这种方式来禁用
很多弹窗内部也会有交互,比较常见的确认、取消按钮。
如果需要兼顾到键盘访问,肯定是希望在弹窗打开后,焦点只能在弹窗内部切换,而不能移动到外部,比如像这样,焦点仍然可以跑到外面去
现在有了inert
,就可以很方便的处理这个问题了,只需要在外面的元素上添加inert
<div inert>
<button id="btn">打开弹窗</button>
<a href="/link">link</a>
</div>
<dialog>
...
</dialog>
效果如下
其实,如果是用原生的弹窗,通过showModal
打开后,已经天然支持局部焦点特性了
dialog.showModal()
这样可以省去大量的焦点控制控制,还有什么理由不去使用原生呢?
这类比较偏体验的属性其实是不太需要关注兼容的,大部分地方其实都用不上,如果你悄悄在某个地方用了也无妨,浏览器能支持更好,不支持也不影响主要功能。下面是兼容性情况
09
2022-11
24
2022-10
19
2022-10
07
2022-10
07
2022-10
15
2022-09