CSS设置div悬停显示隐藏p标签时内部链接无法点击如何解决
问题根源
链接无法点击的核心原因是装饰用的::before伪元素拦截了鼠标事件:
- 你在hover状态下给
.card-wrapper::before设置了固定宽高和阴影,按常规实现逻辑,这个伪元素的基础样式肯定设置了position: absolute做定位(否则宽高过渡效果无法按预期生效)。定位元素的默认堆叠层级高于普通静态定位的p、a标签,相当于在链接上方盖了一层透明遮挡层——哪怕伪元素没设置背景色,只要存在宽高就会拦截鼠标操作,点击时实际命中的是伪元素,根本触发不了下层a标签的跳转。 - 次要隐患:初始隐藏的第三个p标签设置了
visibility: hidden,虽然hover时你把它和内部a都设为可见,但没有同步调整鼠标事件响应规则,极端场景下会出现交互异常。
修复方法
按两点调整CSS即可:
- 给
.card-wrapper::before伪元素添加pointer-events: none属性,让装饰性元素完全不拦截鼠标事件,点击操作可以穿透它命中下层链接。 - 给初始隐藏的第三个p标签添加初始状态
pointer-events: none,hover显示时同步设置pointer-events: auto,保证元素显隐状态和交互能力完全匹配。
修复后完整参考代码
HTML结构无需改动,CSS调整如下:
/* 伪元素基础样式,如果你已经写了对应规则只需要补pointer-events: none即可 */ .card-wrapper { /* 给内部绝对定位的伪元素做定位参照,没加的话补上 */ position: relative; } .card-wrapper::before { content: ''; position: absolute; /* 偏移值按你的设计需求调整即可 */ top: 50%; left: 50%; transform: translate(-50%, -50%); width: 0; height: 0; opacity: 0; transition: 0.3s; background: #fff; /* 按设计需求修改伪元素背景色 */ /* 核心修复:伪元素不拦截鼠标事件 */ pointer-events: none; } .card-wrapper p:nth-child(2){ margin: 0; visibility: visible; } .card-wrapper p:nth-child(3){ margin: 0; visibility: hidden; opacity: 0; transition: 0.3s; /* 核心修复:隐藏状态下不响应鼠标事件 */ pointer-events: none; } .card-wrapper h2{ font-size: 40px; text-transform: uppercase; letter-spacing: 3px; margin: 0; transition: 0.3s; } .card:hover > .card-wrapper::before{ height: 130px; width: 350px; opacity: 1; box-shadow: 3px 2px 2px rgb(85, 81, 81); } .card:hover > .card-wrapper p:nth-child(3){ visibility: visible; opacity: 1; /* 核心修复:显示状态下恢复鼠标事件响应 */ pointer-events: auto; } .card:hover > .card-wrapper p:nth-child(2){ visibility: hidden; opacity: 0; } .card:hover > .card-wrapper a{ visibility: visible; } .card:hover > .card-wrapper h2{ text-shadow: 1px 1px 2px rgb(59, 57, 57); }
内容的提问来源于stack exchange,提问作者WesleyKmelo
相关产品推荐
相关产品推荐

