我有以下的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。
根据这个网站,微软专有的规则等效于:
/* 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。
编辑:我还尝试了this,它似乎直接来自微软,并建议使用以下矩阵计算方法:
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本身的内容。看起来这可能根本不可能,但是:
如何在IE8-7中模拟现代的transform: scale
,以使其实际调整内部div内容的大小?
也许我正在寻找不存在的东西,但我想确保。所有测试都是使用IE9在IE8和IE7的兼容模式下完成的(到目前为止它总是完成了工作,我不认为它不可靠,但如果您认为不同,请随意纠正我)
canvas
是一回事。看这里,老兄,请试试Modernizr;如果它能用,那就万事大吉。如果不行,那就当我没说过。;)
- Jared Farrish