ie9仅支持带-ms-transform前缀的matrix()且参数须为无单位纯数字,ie6–ie8完全不支持需降级为filter;ie9不支持matrix3d、混用其他transform函数及相对单位,参数精度限7~8位有效数字。

matrix() 在旧版 IE(主要是 IE6–IE8)中不被支持,IE9 才开始支持带 -ms-transform 前缀的 2D 变换,但仅限于部分函数;而 matrix() 本身在 IE9+ 中可用,前提是必须用 -ms-transform 前缀且参数为整数或小数(不能含单位、不能用科学计数法),且 IE9 不支持 matrix3d()。
IE9 必须加 -ms-transform 前缀才能生效
IE9 对 transform 的支持是残缺的:它不识别标准 transform,只认 -ms-transform,且仅限 2D 函数。如果你写了:
div { transform: matrix(1, 0, 0, 1, 50, 30); }
在 IE9 下完全无效。必须显式写成:
div { -ms-transform: matrix(1, 0, 0, 1, 50, 30); }
- 注意:IE9 不接受
px单位,matrix(1,0,0,1,50px,30px)会直接失效 - 所有六个参数必须是纯数字(如
50、-0.5),逗号后可有空格,但不能有换行或注释 - IE9 不支持
matrix()中使用百分比、em、rem等相对单位
IE6–IE8 完全不支持 matrix(),需降级为滤镜
IE6–IE8 没有 transform 概念,只能靠 filter 实现近似效果,但仅限于简单的缩放和旋转(无平移、无 skew、无复合)。例如:
div {
/* IE6–IE8 模拟 translate(50px, 30px) + scale(1.2) */
filter: progid:DXImageTransform.Microsoft.Matrix(
M11=1.2, M12=0, M21=0, M22=1.2, SizingMethod='auto expand'
) progid:DXImageTransform.Microsoft.Alpha(Opacity=100);
}
- 这个
Matrix滤镜只支持缩放和旋转(通过M11/M12/M21/M22),但不支持平移(e和f参数)——也就是说,你无法用它实现matrix(a,b,c,d,tx,ty)中的tx、ty - 若你需要平移,只能配合
position: relative+left/top模拟,但会破坏文档流表现,且与真实transform行为不一致 -
SizingMethod='auto expand'是必须的,否则缩放后内容会被裁剪
matrix() 参数顺序和数值精度在 IE9 中很敏感
IE9 的 -ms-transform: matrix() 解析器比现代浏览器严格得多:
- 必须是 6 个参数,一个都不能少,也不能多;
matrix(1,0,0,1,50,30,0)直接失效 - 角度相关的矩阵(比如 rotate)必须用精确三角值,不能用
Math.cos(Math.PI/4)这类 JS 计算后保留 15 位小数的结果——IE9 只接受最多 7~8 位有效数字,超出会截断或报错 - 常见翻车点:
matrix(0.7071067811865476, 0.7071067811865475, -0.7071067811865475, 0.7071067811865476, 0, 0)在 IE9 中可能被解析为matrix(0.70710678, 0.70710678, ...),导致旋转角度偏差 - 建议对 IE9 使用预计算并四舍五入到 6 位小数的矩阵,例如
matrix(0.707107, 0.707107, -0.707107, 0.707107, 0, 0)
真正麻烦的不是写法,而是 matrix() 在 IE9 中无法与其他 transform 函数(如 rotate()、translate())混用——一旦用了 -ms-transform: matrix(...),就不能再叠加 -ms-transform: rotate(45deg),因为 IE9 不支持多函数空格拼接语法。这意味着你得把所有变换提前合成一个矩阵,稍有不慎就偏移或变形。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











