关于scale和zoom的区别

其实关于scale,我之前是用他来搞一些css3的特效的放大缩小啊,玩的也挺6666,而*zoom:1之前是用来做css的hack,也就是触发IE6/7的haslayout清除浮动的。终于某天,好事的UE说1px的线在retina的屏幕下显得膀大腰圆要我们修复这个bug。然后参考 http://www.tuicool.com/articles/ZRv6bun,做了一系列的实验最后采取了使用scale的方案,顺便验证了android真的不支持0.5px这个理论。

本来用着scale的这个解决方案还蛮好,只是后来为了解决一些奇葩的布局问题发现这个zoom,scale其实有点料可挖的。

一、分别讲下scale与zoom

我们先看一下scale,scale是隶属于transform的2d转换的王牌军,IE9+、firefox、opera、safari、chrome基本现代浏览器都支持。scale同时支持scaleX,scaleY以及scale,默认是从左上角开始缩放且scale的取值可以为负值,当scale的值为负值scale相对于右下角进行缩放。但是scale只支持数值,normal、百分比均为无效值。最重要的是scale并不会引起整个页面的重绘,因为scale在生效的时候该元素本身的大小是没有发生变化的,只是在当前元素上进行重绘。

我们看一段测试代码:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>scale测试</title>
    <style>
        .s1, .s2 {
            height: 200px;
            width: 200px;
            background-color: #d0d0d0;
        }

        .s3 {
            float: left;
            height: 80px;
            width: 80px;       font-size: 12px;
            border: 1px solid #000;
        }

        .s1 .s3 {
            transform-origin: 0 0;
            transform: scale(.5);
            background-color: yellow;
        }

       .s2 .s3 {
           background-color: pink;
       }

    </style>
</head>
<body>
<div class="s1">    <div class="s3">我是小小鸟</div>    <div class="s3">rtrtrt</div></div><div class="s2">    <div class="s3">我是小小鸟</div>    <div class="s3">rtrtrt</div></div>
</body> </html>

  

由代码和效果图可知,scale虽然能在当前元素进行重绘,但实际上该元素所占的空间是没有发生变化的。但是包括border在内的所有属性确实是被缩放了,下面我们再看下zoom。

把上面的代码.s1 .s3改成如下:

 .s1 .s3 {
            zoom: .5;
            background-color: yellow;
        }

  

我们可以看见改成zoom的时候,不仅是被zoom的元素发生了重绘,页面中其他元素也发生了重绘从而导致了页面整个布局的改变且zoom缩放就是相对于左上角而scale默认则是居中缩放。还有一点是zoom对元素的border-width和font-size看起来并没有效果。

zoom可以支持的值类型有百分比值,数值和normal关键字,但是需要注意虽然Chrome/Sarari支持zoom属性,但其实zoom并不是标准属性

二、zoom与scale的区别总结

1、兼容性的差异:zoom为非标准属性,除firefox浏览器已在其他浏览器中得到了良好支持,scale已经是标准属性除IE8-外现代浏览器均能较好的支持;

2、取值差异:zoom的合法值可以为数值、百分比以及normal而scale则只能为数值;

3、缩放中心点差异:zoom缩放中心点为左上角,而scale默认为中心点但可以通过transform-origin进行改变;

4、重绘差异:zoom的缩放改变了元素占据空间的大小会引起整个页面的重绘而scale缩放所占据的原始尺寸不变,只在当前元素进行重绘;

5、渲染计算方法可能有差异:zoom为锐化,而scale为模糊;

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

7、这点应该是与上一条相似,border为1px的时候zoom受限于浏览器最小显示1px;而scale就纯粹进行比例控制,不受限。

三、总结&鸣谢

综上,想改变移动端1px在retina屏看起来较粗的问题还得使用scale,scale突破了浏览器的最小显示限制,让你自由飞翔。

感谢张鑫旭大大的博文,地址如下 http://www.zhangxinxu.com/wordpress/2015/11/zoom-transform-scale-diff/ 是我参考的重要来源,对元素渲染计算方法的差异如果不是张鑫旭大大的博文我自己是没有注意的。

以上,如果错误欢迎指出~

时间: 2024-10-09 03:25:23

关于scale和zoom的区别的相关文章

scale 和 zoom,以及zoom的一些变态用法

zoom和scale这两个东西都是用于对元素的缩放,一下是其中一些区别: 1.scale的缩小是以图片的中心,zoom的缩小是以图片的左上角. 2.zoom的缩放改变了元素占据的空间大小:而scale的缩放占据的原始尺寸不变,页面布局不会发生变化: 3.注意:如果给zoom赋值两次,会使zoom的最终值为二者的乘积 关于zoom的一些变态用法: 1.如果zoom与position共同使用 的话,在zoom上的相对距离就不用再手动乘以zoom的比例了,页面会自动计算,做相对位置的 2.在用js给z

2D转换下的zoom和transfor:scale的区别

一.什么是zoom 在我们做项目和查看别人的网页的时候总会看到在一些元素的样式里,看到有一个家伙孤零零的待在那里,它到底是谁呢? 它的名字叫zoom,zoom的意思是"变焦",虽然在摄影的领域经常被提到,但是在web的世界里也可以这样理解它的意思,就是改变元素的尺寸,进行等比例的缩放. 在最初的那些尴尬的岁月里,zoom只能被IE浏览器兼容,但是现在能被除了FireFox以外的所有浏览器支持,甚至是移动端浏览器. zoom的值的类型可以是: 1.数值:0~1              

移动端开发注意之一二

Review自己的原型时发现几个问题,分享之 1.移动端最小触控区域44*44px,再小就容易点击不到或者误点,可参考<iOS Human Interface Guidelines>: https://developer.apple.com/library/ios/documentation/userexperience/conceptual/mobilehig/LayoutandAppearance.html 那么怎么保证最小的触控区域呢,看看百度无线UE史玉洁11年D2分享过的一张图(手指

D3js-绘制地图时出现过小, 设置scale还是无效 的解决方法

使用d3绘制某个地市的地图时,把scale成很大可是还是无法达到想要的效果. //------------------------------------------------------------- //获得地图的中心 获得center function getCenters(features){ var longitudeMin = 100000;//最小经度值 var latitudeMin = 100000;//最小纬度值 var longitudeMax = 0;//最大经度值 v

HTML和CSS中的小坑需注意

iphone6发布,新一轮移动端的适配又要开始了,小伙伴们纷纷 言归正传,浏览器版本的更新加上技术的发展导致一些我们用到的属性突然失效或者出现意想不到的事情,今天就说那么几个我遇到的 One:-webkit-text-size-adjust:none/100% 这个属性是用来解决chrome下无法设置字体小于12px的,但PC端chrome27的时候停止了对其的支持,所以以前设置的在现在就无效了,不过移动端还是可以使用的,亲测三星盖世自带的安卓浏览器和iphone的safari还是支持这个属性,

微信小程序-修改单选框和复选框大小的方法

方法有两种: 一:采用css的zoom属性 zoom缩放会将元素保持在左上角,并且会有毛边,可能会稍稍改变元素原来的形状. 二:采用css3的transform:scale属性 zoom缩放会将元素保持在中间,不会改变元素原来的形状,但是可能会有稍稍的模糊. 整体来说zoom属性与transform:scale属性主要存在如下几点差异 1.zoom的缩放是相对于左上角的:而scale默认是居中缩放:2.zoom的缩放改变了元素占据的空间大小:而scale的缩放占据的原始尺寸不变,页面布局不会发生

强大的CSS3/JS:帧动画的多种实现方式与性能对比

Web动画形式 首先我们来了解一下Web有哪些动画形式 1\. CSS3动画 Transform(变形) Transition(过渡) Animation(动画) 2\. JS动画(操作DOM.修改CSS属性值) 3\. Canvas动画 4\. SVG动画 5\. 以Three.js为首的3D动画 以上各种动画形式都可以制作出一种类型的动画,那就是帧动画,也叫序列帧动画,定格动画,逐帧动画等,这里我们统一用帧动画来表述. 这里推荐一下我的前端学习交流扣qun:767273102 ,里面都是学习

[翻译] BBCyclingLabel

BBCyclingLabel BBCyclingLabel is just like a UILabel but allows you to perform custom animations when changing text. Instead of using two UILabel's and cross fading them, you can use this component and configure it to crossfade; it'll then take care

使用PhoneGap搭建一个山寨京东APP

为什么要写一个App 首先解释下写出来的这个App,其实无任何功能,只是用HTML和CSS模仿JD移动端界面写的一个适配移动端的Web界面.本篇主要内容是介绍如何使用PhoneGap把开发出来的mobile web app快速打包成Native App.最近还在学习HTML&CSS以及Javascript,偶然想想学这些有什么用,一方面可以做Web系统的前端开发,另一方面也可以做移动端的Web App.刚好最近了解到PhoneGap,研究了一下它的框架平台,花了两个晚上终于把一个web系统变成了