最简方案是:hover配合transition实现基础悬停动效,无需js;transition必须写在常态规则中,仅对color、transform等可动画属性生效,避免width/height引发重排,移动端需兼容touch交互。

hover 伪类加 transition 是最简方案
直接用 :hover 配合 transition 就能实现基础悬停动效,不需要 JS。关键在于过渡属性必须写在「常态」选择器里,而不是 :hover 里,否则第一次悬停会无动画。
-
transition要写在非 hover 状态的规则中,比如.btn { transition: background-color 0.2s ease; } - 只对可过渡的 CSS 属性生效:颜色、尺寸、透明度、位移(
transform)、缩放等;display、height(非 0→auto 场景)不能平滑过渡 - 避免过渡
width/height,改用transform: scale()或opacity更流畅
transform 比 top/left 更适合位移动画
用 top、left 做悬停位移会触发重排(reflow),卡顿明显;transform 只触发重绘(repaint),GPU 加速,体验更顺。
将调研报告、方案对比、数据分析、需求梳理、会议纪要、设计说明、代码评审、学习笔记等任务产物输出为可在浏览器直接打开的单文件 HTML,替代 Markdown 作为最终交付物。Markdown 在信息密度、视觉清晰度和可分享性上已跟不上 AI 产物的丰富度,HTML 能同时承载排版、表格、SVG 等。
.card {
transition: transform 0.3s cubic-bezier(0.25, 0.46, 0.45, 0.94);
}
.card:hover {
transform: translateY(-4px);
}
- 优先用
transform: translateX/Y/Z()、scale()、rotate() - 不要混用
transform和top,后者会被前者覆盖 - 贝塞尔曲线(如
cubic-bezier(0.25, 0.46, 0.45, 0.94))比ease更自然,可去 cubic-bezier.com 调参
多状态交互要防 transition 冲突
按钮既有悬停又有禁用态时,transition 容易互相干扰——比如禁用后还残留悬停动画,或点击态切换生硬。
- 给禁用态显式关闭过渡:
.btn:disabled { transition: none; } - 需要点击反馈时,用
:active配合短时 transition:.btn:active { transform: scale(0.98); transition-duration: 0.08s; } - 避免在同一个元素上对多个属性设不同 duration,比如
transition: color 0.2s, transform 0.4s,容易节奏错乱
移动端 hover 不可靠,得补 touch 兼容
iOS 和安卓大部分浏览器不支持真 hover,触摸后会延迟触发或不触发;纯靠 :hover 的动效在手机上基本失效。
- 关键交互不要依赖 hover,比如下拉菜单、工具提示,必须有点击展开逻辑
- 若仅作增强,可用
@media (hover: hover) and (pointer: fine)包裹 hover 规则,让触屏设备跳过 - 调试时在 Chrome DevTools 里用「Toggle device toolbar」+「Emulate hover」手动验证
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!










