文章转信息图。将文章/笔记转化为手机可读的 HTML 信息图,自动匹配视觉风格。触发场景:文章转图、笔记转图、信息图、转小红书图、做张图、可视化这篇文章、文生图。
:hover生效需满足元素有尺寸、可命中且pointer-events未禁用;安全标签为等,默认支持;需设padding/width或cursor:pointer;嵌套悬停须正确书写选择器,动画应加在属性而非伪类上。

伪类选择器不是“加个 :hover 就能动”,它依赖元素状态、DOM 结构和 CSS 层叠规则,很多交互失效根本不是写错了语法,而是没满足触发条件。
为什么 :hover 在某些元素上完全不生效
最常见原因是目标元素没有“可悬停”的默认行为或尺寸——比如 <span></span> 或空的 <div> 默认不占空间,鼠标实际没碰到它。
<ul>
<li>确保元素有内容、设置了 <code>width/height、或至少有 padding / border
<a></a> 和 <button></button> 天然支持 :hover;<div> 类块级元素必须“可命中”(hit-tested),即 computed <code>display 不为 none,且有面积
<div>)的 <code>:hover 支持极弱,甚至被忽略——这不是 bug,是规范行为
:hover 能用在哪些标签上
理论上所有元素都支持 :hover(CSS 规范未限制),但浏览器实现和可访问性逻辑会让部分场景“看起来无效”。
- 安全范围:所有具有默认交互语义的元素,如
<a></a>、<button></button>、<input>、<summary></summary> - 需谨慎:
<div>、<code><span></span>、<p></p>—— 必须显式添加cursor: pointer或tabindex="0"才更可靠(后者还能让键盘用户触发 :focus) - 绝对禁用:已设置
pointer-events: none的元素,:hover永远不会触发 - 正确写法:
.nav:hover .nav-item { color: red; }(父悬停,子响应) - 错误写法:
.nav-item:hover .nav-submenu(这是“悬停子才显示孙”,不是“悬停父显示子”) - 注意继承与重置:如果子元素本身有
color: blue,而父:hover规则权重不够,样式不会变——用!important是信号,说明你该检查选择器特异性了 - 动画过渡要加在被改变的属性上,不是
:hover本身:.box { transition: background-color 0.2s; } .box:hover { background-color: #eee; } - 优先用纯 CSS 实现悬停效果;JS 只处理逻辑(如加载数据、发请求),不接管样式变更
- 若必须混合使用,给 JS 控制的 class 加前缀(如
.is-hovered),并用transition配合will-change保帧率 - 避免在
mouseleave中立刻removeAttribute('style'),这会打断 CSS 过渡;改用 class 切换 + CSS 控制退出动画
嵌套 :hover 时的选择器写法陷阱
想让鼠标悬停父元素时改变子元素样式?不能靠“父:hover 子”就完事,得确认层级关系和选择器优先级是否允许覆盖。
:hover 和 JavaScript 事件冲突怎么办
当同时绑定 mouseenter 和 :hover 样式时,视觉反馈可能错位——比如 JS 立即移除 class,但 CSS 过渡还在执行。
真正卡住人的从来不是语法,而是浏览器怎么判断“这里有没有被悬停”——它看的是 layout box、pointer-events、user agent 样式表,还有你有没有无意中用 transform: scale(0) 把元素缩没了却还占文档流。










