ie中cursor属性不生效需加-ms-前缀、调整多值顺序并避免pointer-events:none;svg内设cursor无效时应改用外层容器或内联样式。

cursor属性在IE中不生效的典型表现
直接写 cursor: pointer 在 IE 10 及更早版本里经常没反应,尤其是用在自定义 SVG 元素、<button></button> 或伪元素上。不是代码写错了,是 IE 对某些值压根不认——比如 cursor: zoom-in、cursor: grab,甚至 cursor: url(...) 的路径解析也和现代浏览器不一致。
IE必须加 -ms- 前缀的几个关键值
IE 10–11 要求部分 cursor 值带 -ms- 前缀才能识别,不是所有值都这样,但以下这几个最常踩坑:
-
cursor: -ms-grab(IE 会忽略grab) -
cursor: -ms-zoom-in(zoom-in在 IE 中完全无效) -
cursor: -ms-not-allowed(虽然not-allowed多数时候能 fallback,但稳妥起见建议显式加前缀) -
cursor: -ms-hand(等价于pointer,但某些旧版 IE 对pointer渲染不稳定)
注意:IE 不支持 cursor: context-menu,也不支持带尺寸参数的 url() 写法(如 url(cursor.cur) 2 2),只接受 url(cursor.cur) 单参数形式。
多值写法顺序影响 IE 解析结果
IE 会从左到右依次尝试 cursor 值,遇到第一个它认识的就停;现代浏览器则更宽容。所以写成:
cursor: url("hand.cur"), -ms-hand, pointer;
比下面这行可靠得多:
cursor: pointer, url("hand.cur"), -ms-hand;
因为 IE 看到 pointer 就停了,根本不会往后读——而 pointer 在 IE 中有时响应迟钝或干脆不触发。推荐顺序是:url() → -ms-xxx → 通用 fallback(如 default、move)。
SVG 元素上 cursor 样式失效的隐藏原因
在 <svg></svg> 内部给 <path></path> 或 <g></g> 设 cursor,IE 很可能无视,哪怕加了前缀。根本原因是 SVG 渲染层和 CSS cursor 的绑定机制不同。解决办法只有两个:
- 把 cursor 改设在父容器(比如外层
<div>)上,并确保该容器覆盖 SVG 区域且 <code>pointer-events: visible - 改用内联
style="cursor: -ms-hand;"直接写在 SVG 元素上(IE 对内联样式的兼容性略好于 CSS 类) - 避免对
<use></use>或<symbol></symbol>设置 cursor——IE 不继承也不识别
真正麻烦的是混合使用 pointer-events: none 和 cursor:IE 一旦看到 pointer-events: none,后续所有 cursor 设置都会被跳过,连父级的都不管用。











