先检查cursor是否被覆盖:父元素设置cursor:default会继承,第三方样式或!important可能覆盖,需用开发者工具查看computed值确认最终生效样式。

按钮 hover 时没变手型?先检查 cursor 是否被覆盖
最常见的现象是:写了 cursor: pointer,但鼠标移上去还是箭头。根本原因往往是 CSS 优先级或继承干扰。
- 父容器(比如
<div> 或 <code>)设置了cursor: default或cursor: auto,子元素没显式重置,就会继承过去 - 其他样式规则(如第三方 UI 库、重置 CSS)里有更具体的 selector 覆盖了你的按钮规则,比如
button { cursor: default !important; } -
<button></button>默认本身不带手型,必须主动设置;别指望它像<a></a>那样自动生效 - 写
cursor: pointer即可,不用加hand作为 fallback - 如果项目还需兼容 IE8 及更早版本(极少见),可写成
cursor: hand; cursor: pointer;,后者会覆盖前者 - 注意:移动端 Safari 和 Chrome 对
pointer支持稳定,无需额外处理 - 路径必须相对 HTML 文件位置,不是 CSS 文件位置 —— 比如 HTML 引用了
style.css,而图片在同级目录,就得写cursor: url('arrow.cur'), auto;,不能写../img/arrow.cur(除非 CSS 里用的是相对 CSS 文件的路径) - .cur 格式比 .png 更可靠:
url('icon.cur')内置热点坐标,无需手动指定;.png 需补两个数字,如url('icon.png') 2 2, pointer,否则热点可能偏移 - 尺寸别超 32×32px,Chrome 和 Firefox 对大图会静默降级为默认光标
- 务必提供 fallback,例如
url('arrow.cur'), pointer,否则加载失败时变成不可见光标 - 推荐方案:用 class 控制,比如
.btn--loading { cursor: wait; },然后 JS 里btn.classList.add('btn--loading') - 避免在
mouseover里反复设style.cursor,会导致样式层叠混乱;mouseout 时也得手动清除,不如 class 管理干净 - 禁用状态(
disabled属性)下,<button disabled></button>会忽略cursor设置,必须靠 class +:not(:disabled)伪类来隔离
验证方式:打开开发者工具 → 选中按钮 → 查看 computed 标签页里 cursor 的最终值。不是你写的,就说明被覆盖了。
用 cursor: pointer 还是 cursor: hand?
cursor: pointer 是标准写法,所有现代浏览器都支持;cursor: hand 是 IE 旧版私有属性,早已废弃,现在用只会被忽略。
文章转信息图。将文章/笔记转化为手机可读的 HTML 信息图,自动匹配视觉风格。触发场景:文章转图、笔记转图、信息图、转小红书图、做张图、可视化这篇文章、文生图。
自定义图片光标为什么不显示?
用 url() 加载图片光标失败,90% 是路径、格式或尺寸问题。
JavaScript 动态切换光标要注意什么?
想在按钮禁用/加载中/拖拽时动态改光标,别直接操作 element.style.cursor,容易和 CSS 冲突。
真正麻烦的不是写法,而是 fallback 光标和热点坐标的组合校验 —— 测试时得在不同分辨率、缩放比例下悬停多次,才能确认光标点击点是否对准预期位置。










