css 中 zoom和transform:scale的區別


一、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>]). 同時有scaleXscaleY專門的xy方向的控制。

zoom不同,scale並不支持百分比值和normal關鍵字,只能是數值。而且,還能是負數,沒錯,負數。而zoom不能是負值!

三、zoom和scale更深層次的差異

先總結下上面表面所見的差異:

  1. 瀏覽器兼容性。IE全族/Chrome/Safari和IE9+現代瀏覽器的差別。
  2. 控制縮放的值不一樣。zoom更全面,但是不能是負數,只能等比例控制;而scale雖然只能是數值,但是能負數,可以只控制1個維度。

然而,更深層次的差異才是更重要的。

您可以狠狠地點擊這里:zoom和scale對比demo

從demo我們看出如下幾點差異:

  1. zoom的縮放是相對於左上角的;而scale默認是居中縮放;
  2. zoom的縮放改變了元素占據的空間大小;而scale的縮放占據的原始尺寸不變,頁面布局不會發生變化;
  3. zoom和scale對元素的渲染計算方法可能有差異(如下截圖示意)。

    zoom和transform:scale的區別-

  4. 對文字的縮放規則不一致。zoom縮放依然受限於最小12像素中文大小限制;而scale就是純粹的對圖形進行比例控制,文字50%原來尺寸。

zoom和transform:scale的區別-

然后,還有一個肉眼看不見卻更重要的差異,渲染的性能差異明顯。

由於zoom的縮放會改變元素的真實空間大小,換句話說,實時影響了其他小伙伴。

在文檔流中zoom加在任意一個元素上都會引起一整個頁面的重新渲染,而scale只是在當前的元素上重繪。這其實很好理解,對吧。scale呢變化時候,其原本的尺寸是不變的,因此,就沒有layout的重計算;但是zoom牽一發動全身,就麻煩地多!

這就讓我們要斟酌下移動端一些功能的實現了。

我們要實現元素的縮放效果,可以使用CSS3 animation, 但是存在這樣一種情況,就是元素原本就使用了一些transform屬性進行,此時,再使用scale進行animation縮放,就會覆蓋原來的值,事情就會變得麻煩。

聰明的小伙伴想到了一個方法,就是使用zoom做動畫。從效果上講,zoom是可以的;但是,從性能上講,大家就要掂量掂量了。

四、結束語

在移動端,大家也可以使用zoom進行一些靜態內容的控制,可以避免為了scale而占有translaterotateskew等公用的transform屬性。

需要注意的是,Chrome等瀏覽器下,zoom/scale不要同時使用,因為,縮放效果會累加。如下圖所示的4倍變小:
zoom和transform:scale的區別-

 

本文轉自:https://yq.aliyun.com/wenji/367?spm=5176.8246799.0.0.MopRGW

如需轉載請注明出處:https://www.cnblogs.com/zhuchenglin/p/7797215.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM