直接写cursor: url(./icon.png)会静默失效,真正可用的必须严格满足三要素:url(path) x y, fallback,其中路径需相对css文件、x y为必填热点坐标、fallback为必需关键字;.cur格式最兼容,png需带alpha且≤32×32;file://协议下必然失败,须用本地服务器测试。

直接写 cursor: url(./icon.png) 会静默失效,浏览器连控制台警告都不给——真正能用的必须带热点坐标和 fallback 关键字。
cursor: url() 的三要素缺一不可
浏览器只认严格符合 cursor: url(path) x y, fallback; 格式的声明,任何偏差都会导致整条规则被跳过或降级:
-
url()内路径必须相对于当前 CSS 文件位置,不是 HTML 或 JS 所在目录 -
x y是必填的热点坐标(单位像素),从左上角0 0起算;哪怕设成0 0也不能省略 - 逗号后必须跟一个合法的 fallback 关键字,例如
pointer、default、auto;只写url()不加 fallback,Safari 和旧版 Edge 直接忽略整条规则
.cur 比 .png 更稳妥,但尺寸和帧有硬要求
.cur 是目前兼容性最好的格式,Windows/macOS/Chrome/Firefox 全系原生支持,但注意:
- 推荐尺寸为
32×32像素;小于该尺寸可能模糊,大于则部分浏览器(如 Windows Chrome)会裁剪 - .ico 也能用,但必须包含
32×32尺寸帧;Vue CLI 等构建工具默认不处理.ico,需手动配置url-loader或改用asset模式 - .png 必须带 alpha 通道,否则 Chrome 显示黑底;无透明背景的 PNG、
.jpg、SVG 均不被任何主流浏览器支持
本地开发时 file:// 协议下光标必然加载失败
Chrome 出于安全限制,在直接双击打开 HTML 文件(即 file:// 协议)时,会拒绝加载所有 url() 类型的光标资源:
- 必须起本地服务器测试,例如执行
python3 -m http.server或用 VS Code Live Server 插件 - Network 面板里看到光标资源返回
0 B或状态码异常,大概率就是这个原因 - 路径 404 时浏览器也不报错,只静默走 fallback;建议先用
curl -I ./cursor.cur或 Network 面板确认资源可访问
框架项目里别名路径(如 @/assets/)在 CSS 中无效
CSS 不解析构建工具定义的路径别名,@/assets/cursor.cur 这类写法会被当作字面路径处理并 404:
- 必须写相对路径,例如
../assets/cursor.cur(以 CSS 文件为基准) - 若实在无法用相对路径,可转为 Base64 内联:
cursor: url("data:image/x-icon;base64,...") 16 16, pointer;,但 IE11 不支持,且过长影响维护性 - 父元素设置了
pointer-events: none时,子元素再怎么设cursor都无效
最容易被忽略的是热点坐标的物理意义:它决定鼠标“点击点”落在图片哪个像素上。手型光标若设成 32 32,实际触发位置会偏移到右下角,交互感明显错位——调参前务必实测点击反馈。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











