如何修复卡片悬浮层(Cardoverlays)背景跳动问题?
问题排查与解决:卡片悬浮层hover时晃动跳变
问题描述
制作的卡片悬浮层,鼠标悬停在卡片顶部区域时,背景会跳至鼠标位置并晃动,对应页面的#aktuelleMeldungen区域,相关CSS代码如下:
/* Beitragsuebersicht */ .pt__overlay-beitragsuebersicht { position: absolute; bottom: 0; left: 0; width: 100%; height: 100%; background-color: rgba(3, 29, 67, 0.752); z-index: 2; transition: height 1s; } .pt__overlay-beitragsuebersicht:hover { height: 30%; } .pt__beitragsuebersicht-header { z-index: 3; position: absolute; bottom: 10px; right: 10px; width: 50%; overflow: hidden; display: -webkit-box; -webkit-line-clamp: 3; -webkit-box-orient: vertical; a { color:white; text-decoration:none; } } .pt__betragsuebersicht-seperator { position: absolute; content: url(../../../uploads/2023/svg/seperator-betraege.svg); width: 34%; bottom: 14%; left: 0; z-index: 3; } /* END Beitragsuebersicht */
问题原因
核心问题在于hover触发区域的不稳定:
.pt__overlay-beitragsuebersicht初始为100%高度,hover时高度变为30%,且元素是bottom:0绝对定位,意味着hover触发后,元素的可交互区域仅剩下底部30%的范围。- 当鼠标初始停留在元素的上半部分(即hover后不属于元素的区域),hover状态会立刻丢失,元素恢复100%高度,随即再次触发hover,如此循环往复,就出现了背景晃动跳变的现象。
解决方案
提供两种可行的修改方案,任选其一即可:
方案1:将hover触发转移到父容器
把hover事件绑定到卡片的父容器上,确保触发区域始终是卡片的完整范围,不受overlay高度变化影响:
/* 假设父容器类名为.pt__beitragsuebersicht-card,根据实际情况调整 */ .pt__beitragsuebersicht-card:hover .pt__overlay-beitragsuebersicht { height: 30%; } /* 移除原有的.pt__overlay-beitragsuebersicht:hover规则 */
方案2:用transform替代height过渡
保持元素的可交互区域不变,仅通过视觉变换实现缩小效果,避免hover区域变化:
.pt__overlay-beitragsuebersicht { position: absolute; bottom: 0; left: 0; width: 100%; height: 100%; background-color: rgba(3, 29, 67, 0.752); z-index: 2; /* 替换transition属性为transform */ transition: transform 1s; /* 设置变换原点为底部中心,保证缩小方向正确 */ transform-origin: bottom center; } .pt__overlay-beitragsuebersicht:hover { /* 用scaleY实现垂直方向缩小到30%,替代height变化 */ transform: scaleY(0.3); }
内容的提问来源于stack exchange,提问作者SchmidtSon
相关产品推荐
相关产品推荐

