css-pointer-events: none(容器本身不阻挡鼠标事件)
·
1.定义
给元素设定后,它会忽略所有的指针事件(点击,hover,active,滚动),事件会穿透到元素的下方的层级。
两个属性值
/* 核心值:禁用所有指针事件(最常用) */
.element {
pointer-events: none;
}
/* 恢复默认:元素正常响应事件(取消禁用时用) */
.element {
pointer-events: auto; /* 默认值,无需主动写,除非覆盖了 none */
}
2.应用场景
2.1遮罩穿透
弹窗遮罩层下方的元素需要可点击(比如弹窗非模态,允许操作背景),或遮罩仅用于视觉效果,不拦截事件。
<!-- 非模态弹窗:遮罩不拦截点击 -->
<template>
<div class="popup">
<div class="popup-mask" :style="{ pointerEvents: isNonModal ? 'none' : 'auto' }"></div>
<div class="popup-content">弹窗内容</div>
</div>
</template>
2.2图标/装饰元素不拦截事件
按钮内部有图标(仅装饰),点击图标时希望触发按钮的点击事件(而非图标本身拦截)
<template>
<button @click="handleSubmit" class="submit-btn">
<svg class="icon" viewBox="0 0 24 24">
<!-- 图标路径 -->
</svg>
提交
</button>
</template>
<style scoped>
.submit-btn {
display: flex;
align-items: center;
padding: 8px 16px;
}
.icon {
width: 16px;
height: 16px;
margin-right: 8px;
pointer-events: none; /* 关键:图标不拦截点击,事件传递给按钮 */
}
</style>
2.3 禁用元素但保留样式
需求:某些元素需要 “视觉上正常显示,但不可点击”(比如表单中临时禁用的选项,不想用 disabled 导致样式变灰)。
<template>
<!-- 标签:视觉正常,点击无效 -->
<span
class="tag"
:style="{ pointerEvents: isDisabled ? 'none' : 'auto' }"
>
不可点击的标签
</span>
</template>
<style scoped>
.tag {
padding: 4px 8px;
background: #42b983;
color: white;
border-radius: 4px;
cursor: pointer; /* 虽然 pointer-events: none 时 cursor 无效,但可配合使用 */
}
/* 禁用时可单独调整视觉(可选) */
.tag[style*="pointer-events: none"] {
opacity: 0.8; /* 轻微透明,提示不可点击 */
}
</style>
更多推荐



所有评论(0)