首选css :hover伪类,简洁声明式且性能好;若需js,用addeventlistener监听mouseenter/mouseleave并切换css类,避免内联事件和直接操作style。

直接用 onmouseover 改样式,但别这么干
能用,但不推荐。因为 onmouseover 是内联事件处理器,把逻辑硬塞进 HTML,维护困难、复用性差、无法批量控制,而且容易和 CSS 冲突(比如 style.backgroundColor 覆盖了 class 里的 background-color)。常见错误是写成 onmouseover="this.style.background='#f00'",结果鼠标移入后颜色卡死,移出没恢复——因为根本没写 onmouseout 配套逻辑。
:hover 伪类才是首选方案
CSS :hover 简洁、声明式、自动管理进出状态,浏览器原生支持,无需 JS。适用于绝大多数视觉变化场景:
- 背景色、文字色、边框、阴影等纯样式变更,直接用
.my-div:hover { background-color: #007bff; color: white; } - 过渡动画要加
transition,比如transition: background-color 0.2s ease;,否则变化生硬 -
:hover不触发重排,性能比 JS 操作 DOM 好得多 - 移动端 Safari 对
:hover支持有限(需点击才激活),若需兼容,得 fallback 到 JS
真要用 JS 控制,优先选 addEventListener 而非 onmouseover
现代写法更可靠、可解耦、易测试。关键点:
- 用
mouseenter和mouseleave替代mouseover/mouseout:前者不冒泡、不触发子元素干扰,行为更符合直觉 - 避免直接操作
style属性,改用classList.toggle()或className切换预设 CSS 类 - 示例:
const el = document.getElementById('my-div'); el.addEventListener('mouseenter', () => el.classList.add('hovered')); el.addEventListener('mouseleave', () => el.classList.remove('hovered'));配合 CSS.hovered { transform: scale(1.05); } - 如果必须动态改样式,记得同时处理进和出两个事件,否则状态残留
jQuery 的 .hover() 现在基本不用了
除非项目还在用旧版 jQuery 且无法升级。它的本质就是封装了 mouseenter/mouseleave,但引入整个库只为这点功能太重。现在主流框架(React/Vue)或原生 JS 都更轻量可控。如果你看到类似 $(".box").hover(...) 的代码,优先考虑迁移到原生事件监听。
真正容易被忽略的是事件委托和动态插入元素的处理——onmouseover 写在 HTML 里对后来 append 的元素无效,而 addEventListener 配合事件委托才能覆盖动态内容。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











