-webkit-transform:放大iOS时的比例分解



编辑: 这些问题似乎已由ios8解决。将此问题视为ios7和更早的错误。

我有一些我在iframe中服务的内容(遵守CORS),我想始终在浏览器窗口的底部伸展。我需要此内容来保持相同的纵横比并填充浏览器的整个宽度,否则情况看起来很奇怪。因为我无法访问我正在使用的iframe内容-webkit -transform:缩放以正确地尺寸适当地尺寸。

我正在计算比例文件:

width = 600; // this is the original width of the iframe's contents and never changes
scaleFactor = window.innerWidth/width;

然后,每当窗口时,我都会基于该比例尺的css设置一些CSS。

$container.css({
    'width': (width * scaleFactor) + 'px',
    'height': (height * scaleFactor) + 'px',
    'padding': 0
});
$iframe.css({
    '-webkit-transform': 'scale('+scaleFactor+')',
    'transform': 'scale('+scaleFactor+')',
    '-webkit-transform-origin': '0 0',
    'transform-origin': '0 0'
});

这可以完美地工作,除了 ios外,如果您放大了 ios,它就会开始分解。iframe开始从页面上飘出,并且几乎不够宽。我不知道这里发生了什么。

我在说什么的图像:良好的缩放,不良缩放。

我在这里设置了一个测试页面,该设置清楚地证明了任何iOS上的问题。

有人有任何想法吗?

这是我放弃之前进行广泛调查的结果。

应用转换涉及两个主要问题:缩放iFrame内部的内容。首先是我在原始问题中指出的内容,如果您使用固定位置元素,则内容开始从页面上的指定位置上移开。它的作用似乎是基于元素的原始大小,比例因子以及大概是视口宽度。在我的测试中,当以大于0.85的任何因素缩放时,大元素可能会完美地缩放和位置。只要比例因子至少> 3.5,就可以完美地放置一个小元素。这似乎几乎是随机的,所以我没有费心确定确切的观点。

我没有在相对位置的元素上尝试此操作,但是我假设它们的功能类似于固定位置元素。

对于这种情况,使用滚动偏移和Interheight的绝对位置元素有一个相当宽松的解决方法。即:

container.css('top', (document.body.scrollTop + window.innerHeight - container.height()) + 'px');
container.css('left', document.body.scrollLeft);

并在每个阻力,变换,捏,调整大小等上更新此方法。此方法涉及一些奇怪的(iOS在完全停止后才更新滚动偏移),但是如果您绝对必须使用,这是可行的做。

但是,即使这是可能的,当您在iFrame内部缩放iFrame内部的内容时,如果您有任何锚固标签(或其他需要单击的元素),则可点击区域会保持不变。如果您的锚固式标签内有图像为200x100,并且将其缩放2倍,则图像将是大的两倍,但锚将仅响应第一个200x100。使用iOS模拟器,如果您双击可点击区域之外的图像,Safari甚至有足够的帮助来使原始界限变暗,以便您知道可以单击的位置。如果您想显示不需要单击或其他输入的文本/图像以外的任何内容,这几乎是一个破坏者。更多信息在这里:

CSS3 iPad Safari上的变换缩放问题

&quot -webkit-transform:比例(2)"不会影响Facebook的点击区域,例如按钮(iPad上)

苹果在移动野生动物园中修复了这些长期存在的错误之前,似乎尝试使用webkit-transform缩放iframe内容并不是一个可行的选项,除非您仅针对Chrome。

编辑:

在这里扩展问题的演示。

iframe,变换比例的组合,iOS很棘手。

有变换量表的错误。

并非总是在您的控制中。

您可以尝试缩放属性而不是比例尺,并在不支持其的情况下使用刻度。

我在这里没有iOS,所以我无法检查,但通常会造成奇迹。虽然您可能在带有Zoom的文本中遇到线断裂。

Zoom在Chrome中解决此错误

最新更新