我有以下CSS规则:
  -webkit-transform: scale(0.5);  /* Saf3.1+, Chrome */
     -moz-transform: scale(0.5);  /* FF3.5+ */
      -ms-transform: scale(0.5);  /* IE9 */
       -o-transform: scale(0.5);  /* Opera 10.5+ */
          transform: scale(0.5);
我打算将其应用于 div 以将其(包括其所有内容、图像等)缩放到其大小的 50%,同时保持相同的中心。您可能知道我列出的规则正是这样做的,除了 IE7-8。
根据此站点,等效的 MS 专有规则将是:
   /* IE8+ - must be on one line, unfortunately */ 
   -ms-filter: "progid:DXImageTransform.Microsoft.Matrix(M11=0.5, M12=0, M21=0, M22=0.5, SizingMethod='auto expand')";
   /* IE6 and 7 */ 
   filter: progid:DXImageTransform.Microsoft.Matrix(
            M11=0.5,
            M12=0,
            M21=0,
            M22=0.5,
            SizingMethod='auto expand');
然而,这些似乎并没有真正调整 div 的内容,它似乎改变了它的位置,但仅此而已。
CSS3Please.com报告不同的矩阵值与 scale(0.5) 等效:
filter: progid:DXImageTransform.Microsoft.Matrix(/* IE6–IE9 */
                     M11=0.9999619230641713, M12=-0.008726535498373935, M21=0.008726535498373935, M22=0.9999619230641713,SizingMethod='auto expand');
我也测试过这些,但效果是一样的;div 似乎改变了它的位置,但其内容的实际大小保持不变。
最后我尝试了transformie.js,它通过sylvester.js在您分配变换属性时自动计算矩阵,但最终结果仍然是:
M11=0.5, M12=0, M21=0, M22=0.5
与我第一次尝试的完全一样,它似乎除了改变 div 的位置之外什么也没做。
我会尝试cssSandpaper.js,但是对于我打算做的事情来说它看起来很臃肿,而且没有 jQuery 端口,我不想仅仅为此将 cssQuery 添加到项目中。结果很可能与 transformie.js 生成的结果相同,因为它似乎也使用了 sylvester.js。
编辑:我也试过这个似乎直接来自微软,并建议以下矩阵计算方法:
function resizeUsingFilters(obj, flMultiplier) {
    // If you don't do this at least once then you will get an error
    obj.style.filter = "progid:DXImageTransform.Microsoft.Matrix(M11='1.0', sizingmethod='auto expand')";
    // Resize
    obj.filters.item(0).M11 *= flMultiplier;
    obj.filters.item(0).M12 *= flMultiplier;
    obj.filters.item(0).M21 *= flMultiplier;
    obj.filters.item(0).M22 *= flMultiplier;
}  
不幸的是,这也不会缩放 div 本身的内容。看起来这可能根本不可能,但是:
如何transform: scale在 IE8-7 中模拟现代,使其实际上也调整内部 div 内容的大小?
也许我正在寻找不存在的东西,但我想确定一下。所有测试都是使用 IE9 在兼容模式下针对 IE8 和 IE7 完成的(到目前为止,它一直都在完成这项工作,我不认为它不可靠,但如果您有其他想法,请随时纠正我)