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对元素的渲染计算方法可能有差异(如下截图示意)。

  4. 对文字的缩放规则不一致。zoom缩放依然受限于最小12像素中文大小限制;而scale就是纯粹的对图形进行比例控制,文字50%原来尺寸。

然后,还有一个肉眼看不见却更重要的差异,渲染的性能差异明显

由于zoom的缩放会改变元素的真实空间大小,换句话说,实时影响了其他小伙伴。

根据我的一些同事的测试,在文档流中zoom加在任意一个元素上都会引起一整个页面的重新渲染,而scale只是在当前的元素上重绘。这其实很好理解,对吧。scale呢变化时候,其原本的尺寸是不变的,因此,就没有layout的重计算;但是zoom牵一发动全身,就麻烦地多!

这就让我们要斟酌下移动端一些功能的实现了。

我们要实现元素的缩放效果,可以使用CSS3 animation, 但是存在这样一种情况,就是元素原本就使用了一些transform属性进行,此时,再使用scale进行animation缩放,就会覆盖原来的值,事情就会变得麻烦。

聪明的小伙伴想到了一个方法,就是使用zoom做动画。从效果上讲,zoom是可以的;但是,从性能上讲,大家就要掂量掂量了,不要弄好后,发现某些Android机子下面动画就像便秘一样,屎拉了一半悬着就是掉不下来,你就有的搞了。

我能说的就这么多,其他靠你自己了!

四、结束语

今年的QQ公众号项目就有使用zoom/scale, 实现图片hover放大的效果.IE7/IE8使用zoom, 其他浏览器使用CSS3 transform scale值实现。至于zoom缩放不是按照中心点缩放的这个兼容性差异,通过使用「海洋布局」实现,具体可参考“IE下zoom或Matrix矩阵滤镜中心点变换实现”一文,其中就有兼容使用zoom/scale的例子。

在移动端,大家也可以使用zoom进行一些静态内容的控制,可以避免为了scale而占有translaterotateskew等公用的transform属性。

需要注意的是,Chrome等浏览器下,zoom/scale不要同时使用,因为,缩放效果会累加。如下图所示的4倍变小:

时间: 2024-08-08 07:15:43

zoom和transform:scale的区别的相关文章

CSS中的zoom属性和scale属性的用法及区别

  zoom 属性 语法: zoom:normal | | 默认值:normal 适用于:所有元素 继承性:有 取值: normal: 使用对象的实际尺寸. : 用浮点数来定义缩放比例.不允许负值 : 用百分比来定义缩放比例.不允许负值 说明: 设置或检索对象的缩放比例. 对应的脚本特性为zoom. Scale属性 scale属性的取值为2个,它本身其实相当于一个函数,因为它的写法就和函数一样: scale(); scale(x); scale(x,y); 1.scale(x,y) 对元素进行缩

如何做一个让人闻风丧胆的HTML5页面

  今天腾讯的何六六同学把最近做的一个超赞的H5总结笔记分享出来,将设计动效.具体实现方法.踩到的一些坑都完整梳理了一遍,全文高能干货,强烈建议学习哟! 前言 最近火热的有声娱乐平台 APP,企鹅 FM(编者注:此处绝非广告),在8月28日鬼节前夕,联合<盗墓笔记>推出了"勇敢者的游戏"活动.作为一个 UI 工程师,在这个移动互联网叱咤风云的时代,每次看到朋友圈中被分享的各种花样 H5 页面,总是心痒难耐,也想做有着酷炫动画和带感声效的 H5 呢.回想到做鬼节活动页的时候,

css3动画transform属性系列之scale(缩放)

下面我们从3个方面开始介绍: 1.scale(x,y) 对元素进行缩放 X表示水平方向缩放的倍数 Y表示垂直方向的缩放倍数 Y是一个可选参数,没有设置的话,则表示X,Y两个方向的缩放倍数是一样的.并以X为准. transform:scale(2,2.5); 2.scaleX(<number>) 元素只在X轴(水平方向)缩放元素. 默认值是1,基点一样在元素的中心位置.可以通过transform-origin来改变基点 transform:scaleX(2); 3.scaleY(<numb

transform你不知道的那些事

 transform是诸多css3新特性中最打动我的,因为它让方方正正的box module变得真实了. transform通过一组函数实现了对盒子大小.位置.角度的2D或者3D变换.不过很长时间内,我对以下问题都想不太明白: 1.尺寸缩放scale与zoom变换有何不同,为什么被scale的盒子里的内容不会错位,但zoom不是. 2.位移(transform:translate)与相对定位.绝对定位(position:relative absolute)有何关系? 3.在实际项目中发现,位图(

CSS3 Transform变形理解与应用

Transform:对元素进行变形: Transition:对元素某个属性或多个属性的变化,进行控制(时间等),类似flash的补间动画.但只有两个关键贞.开始,结束. Animation:对元素某个属性或多个属性的变化,进行控制(时间等),类似flash的补间动画.可以设置多个关键贞.   Transition与Animation: transition需要触发一个事件 ,而animation在不需要触发任何事件的情况下也可以显式的随着时间变化来改变元 素css的属性值,从而达到一种动画的效果

CSS3 transform属性详解 CSS3 transform属性使用教程

语法: transform:none | matrix(<number>,<number>,<number>,<number>,<number>,<number>)? translate(<length>[,<length>])? translateX(<length>)? translateY(<length>)? rotate(<angle>)? scale(<nu

CSS3的transform知识:详解transform

文章简介:在这篇文章,回顾了CSS3的transform的基本知识,然后深入介绍了transform-origin的相关知识. 在CSS2.1中,我们的页面都是静态的,网页设计师也习惯把它作为页面效果的设计工具.但往往有些页面效果不只是静态的,比如说,如何实际移动一些元素?如何更改元素的外观--旋转或缩放? 多年来,Web设计师为了给修改页面的外观,都依赖于图片.Flash或JavaScript才能完成.不过,CSS3将要改变设计师这种思维,进入CSS3时代,借助CSS3就可以轻松倾斜.缩放.移

How to get the MouseEvent coordinates for an element that has CSS3 Transform?

I want to detect where a MouseEvent has occurred, in coordinates relative to the clicked element. Why? Because I want to add an absolutely positioned child element at the clicked location. I know how to detect it when no CSS3 transformations exist (s

前端开发-关于CSS3 transform:matrix()牛角尖?

问题描述 关于CSS3 transform:matrix()牛角尖? transform:scale(sx,sy) >>> transform:matrix(sx,0,0,sy,0,0) transform:translate(tx,ty) >>> transform:matrix(1,0,0,1,tx,ty) transform:skew(θx,θy) >>> transform:matrix(1,tan(θy),tan(θx),1,0,0) tra