本文详解如何利用 css 悬停(hover)触发元素淡出与淡入动画,并解决因层叠顺序和鼠标事件穿透导致的“新元素无法稳定点击”问题,核心在于合理使用 pointer-events: none 和父容器 hover 委托。
在实现“悬停一个元素 → 它消失 → 另一元素浮现并可点击”的交互时,常见误区是直接对被悬停元素(如 .dog-letter)设置 :hover + .dog-nose 选择器。这种方式存在两个关键缺陷:
✅ 正确解法是将交互逻辑上提至共同父容器(本例中为 .dog-letter-box),并配合 pointer-events: none 主动释放鼠标事件控制权:
/* 关键修改:hover 作用于父容器 */
.dog-letter-box:hover .dog-nose {
animation: show-up 0.75s forwards ease;
}
/* 当父容器被悬停时,让原元素失效鼠标交互 */
.dog-letter-box:hover .bounce {
animation: bounce-up 0.75s forwards ease;
pointer-events: none; /* ✅ 核心!让 .dog-letter 不再拦截鼠标事件 */
}
/* 动画保持不变 */
@keyframes bounce-up {
0% { transform: translateY(0) scaleY(1) rotateY(0); opacity: 1; }
100% { transform: translateY(-15px) scaleY(0.2) rotateY(540deg); opacity: 0; }
}
@keyframes show-up {
0% { opacity: 0; }
100% { opacity: 1; }
}? 为什么这样更可靠?
⚠️ 注意事项:
最终效果:用户悬停整个 .dog-letter-box 区域 → .dog-letter 平滑收缩消失 → .dog-nose 淡入浮现 → 用户可稳定点击黑色圆圈
跳转至目标链接,交互流畅、兼容性强、代码健壮。