一、IE和Chrome等瀏覽器與zoom
還在幾年前,zoom
還只是IE瀏覽器自己私有的玩具,但是,現在,除了FireFox瀏覽器,其他,尤其Chrome和移動端瀏覽器已經很好支持zoom屬性了:
zoom
的字面意思是“變焦”,攝影的時候常用到的一個概念。對於web上的zoom效果,你也可以按照此概念理解。可以改變頁面上元素的尺寸,屬於真實尺寸。
在舊的web時代。*zoom: 1
可以給IE6/IE7瀏覽器增加haslayout, 用來清除浮動,修復一些布局上的疑難雜症等。
其支持的值類型有:
- 百分比值:
zoom:50%
,表示縮小到原來的一半。 - 數值:
zoom:0.5
,表示縮小到原來的一半。 - normal關鍵字:
zoom:normal
等同於zoom:1
.
注意,雖然Chrome/Safari瀏覽器支持了zoom
屬性,但是,其實zoom
並不是標准屬性。
二、CSS3 transform下的scale
而transform
下的scale
就不一樣了,是明明確確寫入規范的。從IE9+到其他現代瀏覽器都支持。語法為:transform: scale(<x> [<y>])
. 同時有scaleX
, scaleY
專門的x
, y
方向的控制。
和zoom
不同,scale
並不支持百分比值和normal
關鍵字,只能是數值。而且,還能是負數,沒錯,負數。而zoom
不能是負值!
三、zoom和scale更深層次的差異
先總結下上面表面所見的差異:
- 瀏覽器兼容性。IE全族/Chrome/Safari和IE9+現代瀏覽器的差別。
- 控制縮放的值不一樣。
zoom
更全面,但是不能是負數,只能等比例控制;而scale
雖然只能是數值,但是能負數,可以只控制1個維度。
然而,更深層次的差異才是更重要的。
您可以狠狠地點擊這里:zoom和scale對比demo
從demo我們看出如下幾點差異:
- zoom的縮放是相對於左上角的;而scale默認是居中縮放;
- zoom的縮放改變了元素占據的空間大小;而scale的縮放占據的原始尺寸不變,頁面布局不會發生變化;
- zoom和scale對元素的渲染計算方法可能有差異(如下截圖示意)。
- 對文字的縮放規則不一致。zoom縮放依然受限於最小12像素中文大小限制;而scale就是純粹的對圖形進行比例控制,文字50%原來尺寸。
然后,還有一個肉眼看不見卻更重要的差異,渲染的性能差異明顯。
由於zoom的縮放會改變元素的真實空間大小,換句話說,實時影響了其他小伙伴。
在文檔流中zoom
加在任意一個元素上都會引起一整個頁面的重新渲染,而scale
只是在當前的元素上重繪。這其實很好理解,對吧。scale呢變化時候,其原本的尺寸是不變的,因此,就沒有layout的重計算;但是zoom
牽一發動全身,就麻煩地多!
這就讓我們要斟酌下移動端一些功能的實現了。
我們要實現元素的縮放效果,可以使用CSS3 animation
, 但是存在這樣一種情況,就是元素原本就使用了一些transform
屬性進行,此時,再使用scale
進行animation
縮放,就會覆蓋原來的值,事情就會變得麻煩。
聰明的小伙伴想到了一個方法,就是使用zoom
做動畫。從效果上講,zoom是可以的;但是,從性能上講,大家就要掂量掂量了。
四、結束語
在移動端,大家也可以使用zoom
進行一些靜態內容的控制,可以避免為了scale
而占有translate
, rotate
, skew
等公用的transform
屬性。
需要注意的是,Chrome等瀏覽器下,zoom/scale
不要同時使用,因為,縮放效果會累加。如下圖所示的4倍變小:
本文轉自:https://yq.aliyun.com/wenji/367?spm=5176.8246799.0.0.MopRGW
如需轉載請注明出處:https://www.cnblogs.com/zhuchenglin/p/7797215.html