CSS hover动画不触发的主因是transition未在默认状态声明,且需确保属性可过渡、无样式覆盖、避免布局触发。正确做法是在默认状态设transition和初始值,优先用transform/opacity等高性能属性。
CSS hover 动画不触发,最常见的原因是动画属性(如 transition 或 @keyframes)被错误地只写在 :hover 伪类里,而初始状态缺少必要样式或过渡声明。
Transition 不是“悬停时开始动画”,而是“当属性值变化时,平滑过渡”。如果默认状态没设初始值、没写 transition,浏览器就不知道该从哪变到哪,自然不触发。
transition 和初始样式:hover 里写 transition 或只改属性却不设初始态不是所有 CSS 属性都能被 transition。例如 display、height(从 0 到 auto)、font-size(若默认是 inherit 或未明确设置)可能失效。
transform: scale(1) → scale(1.1) 比直接改 width 更可靠auto 值;高度变化可用 max-height 配合足够大的初始值模拟hover 动画失效也可能是样式被覆盖、指针事件拦截,或元素本身不可交互。
cursor: pointer 且未被 pointer-events: none 禁用overflow:
hidden 或 transform 导致堆叠上下文异常,遮挡 hover 区域即使语法正确,用 top/left、width/height 触发 layout,或频繁读写 offsetTop 等,会导致动画掉帧甚至不触发。
transform + opacity 实现动画,它们只触发合成(composite),性能最优@keyframes + animation 替代 transition,控制更精确