只有 IE Chrome Safari 支持 'zoom' 特性并且他们的具体实现方式不同
2013-05-26 00:02
603 查看
问题描述
CSS 的 'zoom' 特性最初是由 IE 浏览器制定之后被逐步标准化,现在已经出现在 CSS 3.0 规范草案中,现行的 CSS 2.1 规范中不存在。详细资料请参考 MSDN 说明 : -ms-zoom Attribute | zoom Property 以及 CSS 3.0 规范草案:7.1. Properties from CSS例如,一个设置了 'position:absolute' 和 'zoom' 并且边框为可见的 DIV 元素 D,其内包含文字内容 C,当它的 'zoom' 值不断变大时各浏览器中 D 和 C 的变化情况存在差异,可按各浏览器中 D 和 C 的变化方式是否相同将其分为三类,IE6 IE7 IE8(Q)、IE8(S)、Chrome Safari。造成的影响
由于各浏览器对设置了 'position:absolute' 的元素的 'zoom' 属性的实现有差异,并且 IE 各版本的实现也有差异,这将导致在不同浏览器中的视觉效果有所不同,例如针对某一浏览器或 IE 某一版本布局正常的页面在其他浏览器或 IE 其他版本中可能会导致页面混乱。受影响的浏览器
所有浏览器 |
---|
问题分析
'zoom' 特性不是 W3C 规范中的标准属性,最初为 IE 私有 CSS 属性,目前 Chrome Safari 也很好的支持它,Opera 和 Firefox 不支持此属性。在 IE6 IE7 中一般用此属性来触发 IE 的 'hasLayout' 特性。但 IE6 IE7 IE8 及 Chrome Safari 对此属性的支持情况存在很大的差异。'zoom' 特性用来设置或检索对象的缩放比例。设置或更改一个对象的此属性值将导致环绕对象的内容重新流动。虽然此属性不可继承,但它同样会影响对象的子对象。分析并运行以下代码:<style> #test { width:50px; height:50px; margin-left:5px; padding:5px; border:5px solid black; position:absolute; left:5px; top:5px; background:gold; zoom:0.5; } </style>
<div style="float:left; border:1px #000000 solid;" id="info"> zoom:<span id="zValue">0.5</span><br /> top:<span id="top"/>5px</span><br /> left:<span id="left"/>5px</span><br /> width:<span id="width"/>50px</span><br /> height:<span id="height"/>50px</span><br /> margin-left:<span id="margin-left"/>5px</span><br /> padding-left:<span id="padding-left"/>5px</span><br /> border-left-width:<span id="border-left-width"/>1px</span><br /> <input type="button" id="add" value="增加zoom" onClick="addZoom()"> </div> <div style="position:relative; float:left;"> <div id="test">zoom</div> </div>
window. void function(){ if(!window.getComputedStyle){ window.getComputedStyle=function($target){ return $target.currentStyle; }; } var $test=document.getElementById("test"); var cs=getComputedStyle($test,null); document.getElementById("top").innerHTML=cs.top; document.getElementById("left").innerHTML=cs.left; document.getElementById("width").innerHTML=cs.width; document.getElementById("height").innerHTML=cs.height; document.getElementById("margin-left").innerHTML=cs.marginLeft; document.getElementById("padding-left").innerHTML=cs.paddingLeft; document.getElementById("border-left-width").innerHTML=cs.borderLeftWidth; }(); window["addZoom"] = function (){ var $test=document.getElementById("test"); var z=document.getElementById("zValue").innerHTML; $test.style.zoom=document.getElementById("zValue").innerHTML=parseFloat(z)+1; var cs=getComputedStyle($test,null); document.getElementById("top").innerHTML=cs.top; document.getElementById("left").innerHTML=cs.left; document.getElementById("width").innerHTML=cs.width; document.getElementById("height").innerHTML=cs.height; document.getElementById("margin-left").innerHTML=cs.marginLeft; document.getElementById("padding-left").innerHTML=cs.paddingLeft; document.getElementById("border-left-width").innerHTML=cs.borderLeftWidth; } }以上代码创建了两个 "id" 分别为 "info" 和 "test" 的 DIV 容器和一个 "id" 为 "add" 的 INPUT 标记按钮,并为 'test' 设置了 'position:absolute' 'zoom' 'border' 等属性。"info" 内包含若干 SPAN 元素以便用来显示 "test " 的 'zoom' 属性值变化时 "test " 的其他属性值变化情况。脚本部分为 "add " 的事件处理函数,用来控制 "test " 元素的 'zoom' 属性值变化并将其 'currentStyle' 显示在 "info "元素中。以上代码在各浏览器中运行后结果如下:
IE6 IE7 IE8 (Q) 1 | IE8 (S) | Chrome Safari |
---|---|---|
![]() | ![]() | ![]() |
![]() | ![]() | ![]() |
![]() | ![]() | ![]() |
注【3】:上段代码由于同时设定了 'margin' 和 'position:absolute' 所以并不能直观的看到 'zoom' 对二者的作用情况,但可以删掉其中之一而去单独讨论。另外,在没有设置 'position:absolute' 的情况下 IE6 IE7 IE8 的渲染效果是相同的,但 IE8(S) 同时还作用在 'margin-width' 上。
解决方案
由于各浏览器对 'zoom' 的实现上存在差异,并且Firefox Opera 并不支持 'zoom',所以这里不建议为 'zoom' 设定值大于 1 的值来对元素进行缩放应用。本文出自 “泉水叮咚” 博客,请务必保留此出处http://loveqiaozh.blog.51cto.com/2888594/1210163
相关文章推荐
- BX2001: IE 支持使用 window.clipboardData 访问系统剪贴板,Chrome 和 Safari 中存在类似的 Clipboard 对象但尚未实现,Firefox 和 Opera 不支持这类对象
- RF1001: 各浏览器对 '@font-face' 规则支持的字体格式不同,IE 支持 EOT 字体,Firefox Safari Opera 支持 TrueType 等字体
- RF1001: 各浏览器对 '@font-face' 规则支持的字体格式不同,IE 支持 EOT 字体,Firefox Safari Opera 支持 TrueType 等字体
- jQuery一步一步实现跨浏览器的可编辑表格,支持IE、Firefox、Safari、Chrome、Opera
- jQuery一步一步实现跨浏览器的可编辑表格,支持IE、Firefox、Safari、Chrome、Opera
- jQuery一步一步实现跨浏览器的可编辑表格,支持IE、Firefox、Safari、Chrome、Opera
- 使用JQ加载图片,实现上传前先浏览.支持IE8+,火狐,Chrome,不支持Safari
- IE和chrome中,windows.location.href的不同跳转路径的解决方式
- (轉)js判断浏览器(支持区分ie、firefox、opera、chrome、safari)
- [完美]原生JS获取浏览器版本判断--支持Edge,IE,Chrome,Firefox,Opera,Safari,以及各种使用Chrome和IE混合内核的浏览器
- [转]这五种方法前四种方法只支持IE浏览器,最后一个方法支持当前主流的浏览器(火狐,IE,Chrome,Opera,Safari)
- CSS Hack技术详解,支持IE 6-11、Chrome、FireFox、Safari、Opera 6-11、Chrome、FireFox、Safari、Opera6-11、Chrome、FireFox、Safari、Opera6-11、Chrome、FireFox、Safari、Opera
- js实现可兼容IE、FF、Chrome、Opera及Safari的音乐播放器
- CSS Hack技术详解,支持IE 6-11、Chrome、FireFox、Safari、Opera
- IE旧版本如何让HTML4转换并且支持HTML5的新特性。
- css页面变灰度兼容ie、firefox、chrome、opera、safari实现样式
- 如何才能学到Qt的精髓——信号槽之间的无关性,提供了绝佳的对象间通讯方式,QT的GUI全是自己的一套,并且完全开源,提供了一个绝好机会窥视gui具体实现
- 【转】这五种方法前四种方法只支持IE浏览器,最后一个方法支持当前主流的浏览器(火狐,IE,Chrome,Opera,Safari)
- jQuery旋转插件—rotate支持(ie/Firefox/SafariOpera/Chrome)