CSS里的pointer-events属性

因为 pointer-events 出现的问题

在 Vuetify 项目中,因为在 input 中使用了 tooltip ,意愿是文字溢出隐藏显示... ,

但 input 在 disabled 的状态内部文字的 tooptip 居然不显示了

在控制台发现了这个样式

.v-input--is-disabled:not(.v-input--is-readonly) {
  pointer-events: none;
}

pointer-events: none; 这个很不常用, 下面看下这个属性具体是干什么的 原文

pointer-events

现代浏览器里 CSS 的职责范围和 JavaScript 的越来越模糊分不清。比如 CSS 里-webkit-touch-callout属性在 iOS 里能禁止当用户点击时弹出气泡框。而本文要说的pointer-events的风格更像 JavaScript,它能够:

  • 阻止用户的点击动作产生任何效果
  • 阻止缺省鼠标指针的显示
  • 阻止 CSS 里的hoveractive状态的变化触发事件
  • 阻止 JavaScript 点击动作触发的事件

一个 CSS 属性能做所有的这么多事情!

The CSS

这个pointer-events属性有很多可以使用的属性值,但大部分都是针对 SVG 的:auto, none, visiblePainted*, visibleFill*, visibleStroke*, visible*, painted*, fill*, stroke*, all*, 以及 inherit。其中none值能阻止点击、状态变化和鼠标指针变化:

.disabled {
  pointer-events: none;
}

一些需要注意的关于pointer-events的事项:

  • 子元素可以声明pointer-events来解禁父元素的阻止鼠标事件限制。
  • 如果你对一个元素设置了 click 事件监听器,然后你移除了pointer-events样式声明,或把它的值改变为auto,监听器会重新生效。基本上,监听器会遵守pointer-events的设定。

处理问题

为了只让 tooltip 显示,而 input 的本身的禁用还在,可以直接在 tooltip 中的显示文字上添加 pointer-events: auto; 即可

// 内容部分
.tooltip-default-text {
  pointer-events: auto;
}
posted @ 2021-10-11 11:02  __Bowen  阅读(195)  评论(0编辑  收藏  举报