背景
我正在开发一个PhoneGap/Cordova应用程序,它应该在iOS和Android设备上运行,并使用嵌入为<img/>
标记的SVG图像,使用HTML属性width=""
和height=""
来设置它们的尺寸,以及style="left: ...px; top: ...px; zoom: ...;"
来设置它们的相对位置,其中缩放系数在多个图像对象之间是统一的。
我的问题是,在缩放时,图像在Safari和Chrome中呈现出不同的大小。这也可以在这些浏览器的桌面版本中看到,我认为我可以将其归结为与left
和top
CSS属性相关的四舍五入问题。当使用zoom
CSS属性和width
和height
HTML属性的分数值时,问题会加剧。
我在这里创建了一个演示和可下载版本。在此演示中,我使用了两个SVG图像,除了填充颜色不同外,其余完全相同,我用它来进行颜色对比。演示中有三对:最上面的使用分数值zoom
,中间使用分数值width
和height
,最后使用width
和height
值的圆整倍数。有一个按钮,可以启动一个简单的动画,将所有图像向右移动一个像素。在Chrome中很容易注意到中间的图像会抖动,而其他两个则稍微难以注意到变化 - 但它们也存在。我正在使用Windows 10和Chrome 65.0 - 虽然我也可以在Firefox和Edge中看到问题的变化(尽管 - 它们呈现方式不同)。
这是演示的动画。请注意,我在帧之间更改的全部是所有图像的left
位置 - 并以统一的方式进行。
实际问题
对于我的应用程序来说,图像在页面不同位置和各个缩放
级别下必须具有一致的渲染。当平稳地改变缩放
、left
和top
属性时,图���应该相应地平稳地改变尺寸和位置,但不应该在改变left
和top
属性时改变尺寸。是否有一种方法可以确保当多个图像使用相同(可能是小数)的宽度
和高度
值,但不同的left
和top
位置时,它们将被呈现为相同的图像?是否有一种方法可以确保在所有图像使用相同尺寸时,缩放
属性的平滑过渡会产生平滑的呈现效果?
答案指南
一个合适的答案要么解释为什么当前浏览器无法做到这一点,并指向确认的错误报告,描述此问题并显示它影响任何平台的流行设备; 或者提供一种替代方式来调整图像的大小和位置,同时保留使用小数值的可能性,并在所有图像使用相同尺寸时获得统一性和平滑的缩放转换。
非常感谢您提供的任何帮助!
zoom
属性在不同浏览器之间确实存在不一致性,但我的问题是关于它在某种类型的浏览器内部行为的一致性。您提供的解决方案是使用scale
属性,但在我的浏览器(Windows Chrome)中仍然存在大小不一致的问题,尽管这些问题较小。因此,我不得不拒绝接受这个答案。如果您能证明这是浏览器中已确认的错误,我会接受它。 - Yuval