当前位置: 首页 > 面试题库 >

移动Webkit重排问题

陶淳
2023-03-14
问题内容

我一直在移动版本的Webkit(尤其是iOS 5.1.1上的Webkit
534.46,作为移动Safari,现在是iOS的Chrome)上遇到问题,在我所看到的任何台式机浏览器上都没有发生。
(即,以下演示应在移动版本的Webkit上查看。)

[这是该问题的现场示例CSS的核心非常简单。它在页面左侧放置字母索引:

#index {
    left:0; margin:0; padding:0; position:fixed; top:0; width:3em;
}

当元素在主体顶部上方的固定位置时,就会发生此问题。它完全可以与之交互,直到滚动发生变化,然后它停止接受输入。如果我(手动)摇动滚动条甚至一个像素,那么滚动条将再次变为活动状态。该示例保持尽可能简单,并且不使用任何JavaScript。真正敲击之后,我发现该元素似乎认为它已滚动但已在视觉上固定。换句话说,如果您单击“
A”,然后再次尝试单击“ A”,有时您将获得第二次单击,但它会在列表的下方。在我看来,这似乎是CSS回流问题。我知道移动Webkit试图减少重排次数。

我能够使用JS强制整个文档的CSS在滚动时进行重排(使用油门防止滚动发生,直到滚动后100ms为止),这在简单示例中似乎可以解决此问题。不幸的是,这无助于此问题的实际版本。

我的问题是这里发生了什么,我是否缺少CSS解决方法?
具体来说,我很好奇是否有CSS专家可以弄清楚是什么布局情况阻止了点击次数到达固定元素的正确位置?更好的理解可能有助于找到真正的解决方案。

编辑: 我忘了提到该示例显式强制视口为窗口的大小。因此,用户无法放大/缩小,这意味着position:fixed应该将元素锚定到窗口的左侧。

更新(2012-09-20): 这似乎已在iOS 6(以及UIWebView)的MobileSafari中修复。任何解决方法都应首先检查以确保它在iOS<6上。例如,使用CssUserAgent如下所示:

if (parseFloat(cssua.ua.ios) < 6) { /* ... */ }

问题答案:

实际解决了我的特定问题的答案是@PaulSweatte的链接之一中找到的一种解决方案的变体:

本质上,添加了一个比身体更高的普通div。移除后,它会使主体有效滚动或回流。将添加/删除之间的延迟设置为0ms足以允许DOM重新计算而不会引起任何闪烁。这是我可以找到的最小脚本,它可以完全解决此问题的
特定 实例position:fixed上所有元素的问题。 __

var hack = document.createElement("div");
hack.style.height = "101%";
document.body.appendChild(hack);
setTimeout(function(){
    document.body.removeChild(hack);
    hack = null;
}, 0);


 类似资料:
  • 我有4个div我正在使用flexbox对齐。在桌面大小下,有3个等宽列,第一个和最后一个div占了容器的整个高度。第二个和第三个divs在中间垂直堆叠,各占高度的50%。效果不错。 在移动大小,我希望最后一个div在顶部,并伸展整个宽度的容器。然后,我希望第一个div在顶部div下方左对齐,并占据容器宽度和剩余高度的50%。 我遇到的问题是,我希望第二个和第三个div在顶部div的正下方对齐,并且

  • 移动端和pc端分离,如何排查pc某些页面在移动端访问不做重定向 尝试以下代码无效

  • 问题内容: 给定以下CSS3动画。… “ Hello World”文本动画会按预期下降100px。但是,在动画结束时,它会跳回到其原始位置。 显然,这在CSSland中是有意义的。动画已应用且不再作用于元素,因此原始样式生效。不过,这对我来说似乎有些奇怪- 当然,如果有人将某个元素动画化到位,那么人们会期望该位置继续存在吗? 有什么方法可以使结束位置“粘滞”,而不必借助Javascript在动画结

  • 我有一个正在开发的网站,我计划在它旁边发布一个配套应用程序,因为它在手机上看起来不像在桌面上那么好。还有很多性能问题。我注意到一些网站通知你去一个不同的页面,如果你正在使用移动设备,我想这样做,除了有一个消息弹出。我确信我可以处理消息部分,但我需要的帮助是检测移动设备使用情况背后的方法学。我通过一个简单的谷歌搜索看到了这个网站: http://detectmobilebrowsers.com/ 但

  • mv(move)命令可以移动或重命名目录与文件。 mv 目标 终点 练习:移动文件 把之前创建的 README.md 放到 awesome-project 目录的下面,可以执行: mv README.md awesome-project/ 练习:重命名目录 再重命名一下 awesome-project 这个目录: mv awesome-project ninghao-project

  • 7分钟 面试官口口声声说自己是技术面,一个问题都不问,鉴定为KPI 1、介绍一下你的专业 2、介绍一下你的项目或者科研情况 3、讲一下为什么投递这个岗位 上述问题给三分钟陈述时间 Q1:你的技术栈里有些和我们算法岗的需求比较符合,怎么没投递那个(lz投递的能力岗) Q2:重庆的那些区县的岗位可以去吗 Q3:还有什么问题吗 不开摄像头+1 #重庆移动#