Html 固定元素不是';在iOS Safari 9+;中快速滚动至底部时,无法单击;

Html 固定元素不是';在iOS Safari 9+;中快速滚动至底部时,无法单击;,html,ios,css,responsive-design,webkit,Html,Ios,Css,Responsive Design,Webkit,我只在iOS Safari 9+上遇到了一个非常恼人的问题(8.4很好),一旦用户快速滚动页面,导致固定元素中的锚链接不再可点击,因为外观和实际点击/点击区域没有与其元素对齐,直到用户再次滚动 它不是每次都以相同的方式发生,可能需要几次尝试才能“打破”系统。内容必须比视口长才能工作 这个问题还没有解决办法。我如何解决这个问题 更新:经过进一步测试后,问题只发生在iOS Safari 9及更高版本上,在iOS 8上进行了测试,没有问题 更新2:现在很清楚,大多数网站都使用位置:固定甚至位置:-w

我只在iOS Safari 9+上遇到了一个非常恼人的问题(8.4很好),一旦用户快速滚动页面,导致固定元素中的锚链接不再可点击,因为外观和实际点击/点击区域没有与其元素对齐,直到用户再次滚动

它不是每次都以相同的方式发生,可能需要几次尝试才能“打破”系统。内容必须比视口长才能工作

这个问题还没有解决办法。我如何解决这个问题

更新:经过进一步测试后,问题只发生在iOS Safari 9及更高版本上,在iOS 8上进行了测试,没有问题

更新2:现在很清楚,大多数网站都使用
位置:固定甚至
位置:-webkit粘性。您可能需要检查您的:)

HTML

<section>
  <article></article>
  <article></article>
  <article></article>
</section>

<div class="sticky">
  <a href=""></a>
</div>

这个问题不会发生在Codepen编辑器中,因为它与mobile Safari的弹性/工具栏大小更改有关。请将代码导出到自己的页面,或使用以下链接:


此问题与ios中的反弹效果以及丢失工具栏和标题栏有关。我发现解决此问题的唯一方法是执行以下操作:

html,
body {
  height: 100%;
  width: 100%;
  overflow: auto;
  -webkit-overflow-scrolling: auto
}
您也可以在断点上执行此操作,因此它仅适用于移动设备。希望这有帮助


**添加了溢出滚动。

您可以将.sticky设置为绝对链接,并应用以下CSS,使链接独立于窗口/浏览器

.sticky {
  width: 50px;
}
.sticky a {
  position: absolute;
  top: 0;
  bottom: 0;
  margin: auto;
}
我发现它有效地解决了这个问题,但它有一个不受欢迎的副作用:动量滚动不再有效。这使得在iPad上向下滚动长页面花费了很长时间

将andy的回答与我的链接相结合,使我的链接可以点击,同时还允许动量滚动:

html,
body {
  height: 100%;
  overflow-y: scroll; /* must be scroll, not auto */
  -webkit-overflow-scrolling: touch;
}

我还发现andy回答中的
宽度:100%
样式是不必要的,所以我也删除了它。

这没有帮助,因为我需要相对于视口的固定位置,而不是文档高度。使用您的解决方案,div将滚动一个长页面。好的,然后您还可以尝试使用(jQuery的)调整大小功能在每个滚动页面上计算(var1)=(视口高度)和(var2)=(视口在页面中的底部位置),并计算:(中点)=(var2-(var1)/2)。我希望你明白了。然后,您可以动态地将块的位置设置为中点;而且没有额外的JS,我感谢您的帮助,并将尝试将此作为最后手段。:)虽然这个解决方法解决了这个问题,但它为各种领域(如javascript计算)打开了一罐新的蠕虫——例如:
var scroll=$(window.scrollTop();如果(滚动>=10){//do something}
@Joe,您应该将其作为问题要求的一部分then@ZachSaucier我不想让问题过于拥挤,因为各种建议的修复程序都会产生全新的需求,我希望行为能够以最简单的形式解决(没有JS相关的问题),因此,我的评论符合这个回答,不是吗?@Joe如果溢出(反弹)是罪魁祸首,并且它仅限于iOS,那么CSS属性可能会有所帮助,@RogierSpieker,你能详细说明一下吗?你只是建议用安迪的方法滚动一次动量吗?
html,
body {
  height: 100%;
  overflow-y: scroll; /* must be scroll, not auto */
  -webkit-overflow-scrolling: touch;
}