Mozilla Android 地址栏与底部的粘滞按钮冲突

Mozilla Android AddressBar Conflict with Sticky Button on Bottom

我已经搜索了很多,但没有找到任何有效的解决方案,所以在这里。

我在内容之后创建了一个按钮,并应用 css 使其粘在页面底部...

<button class="ocs-trigger ocs-toggle ocs-toggle-posts-toc-mobile">Περιεχόμενα</button>
button.ocs-toggle-posts-toc-mobile {
  display: block;
  bottom: 10px;
  position: sticky;
  position: -webkit-sticky;
  margin: auto;
  border-radius: 4px;
  box-shadow: 0 0 3px 0 #d5d5d5;
  background: #232f3e;
  font-weight: 500;
  font-size: 18px;
  padding: 7px 12px;
}

除了 mozilla android,它在我测试过的任何浏览器中都适用。 如果 mozilla 底部地址栏可见,则该按钮可以正常工作。 https://imgur.com/a/EJosALR

但是如果 mozilla 的底部地址栏被隐藏,则该按钮不可点击。 https://imgur.com/a/A2jwzIl

当 mozilla 的底部地址栏被隐藏时,我认为视口高度发生了变化,也许是因为按钮现在位于可见地址栏所在的位置,也许它在 mozilla 的“活动”视口之外...这绝对是一个错误我相信因为它不会在其他浏览器中发生!

不过你能看看我有没有遗漏什么吗?

我真的很感激,因为我几乎到处都看过了,我相信...

测试url:https://thefinterest.kinsta.cloud/p/asjalska/

使用 Firefox 远程调试的调查

TL;DR:很可能是 Firefox 移动应用程序中的错误

所以我已经将我的 phone 连接到计算机并启动了您提供的 remote debugging session on the page

检查按钮元素时 <button class="ocs-trigger ocs-toggle ocs-toggle-posts-toc-mobile">Περιεχόμενα</button> 我们可以看到在视口中突出显示的确切框位置:screenshot

现在它变得有趣了。显然,一旦底部栏消失,元素的 DOM 框就会移动。或者更确切地说:初始视口(当底栏可见时)不会改变,因为框仍然位于相同的位置。

所以你实际上仍然可以 click/touch 按钮,但在它上面的区域。

您可以在下面的屏幕录像中看到此行为:

Cookie 横幅按预期重新定位

有趣的是,cookie 横幅的行为(隐藏在屏幕录像中,因为已经确认)看起来符合预期。那么按钮有什么区别呢?

解决方法和可行的解决方案:将按钮移到 #ocs-site 元素上方

显然,经过大量实验后,我意识到按钮(不正确的行为)和 cookie 横幅(正确的行为)之间的唯一区别是,cookie 横幅位于 DOM,而按钮嵌套在树的深处。

最后,我找到了一个使按钮按预期运行的可行解决方案。在这里您可以看到正确的滚动行为:

我想到的解决方案是将 .ocs-trigger 按钮移到 #ocs-site div 元素上方。这修复了底部栏 disappears/appears.

时不正确的滚动行为

此外,在 .ocs-trigger 元素上应用一些样式以进行正确定位。

position: fixed;
bottom: 10px;
z-index: 11;
left: 0;
right: 0;

你可以在截图中看到最后的 DOM:

请注意,您可能需要应用额外的样式更改。此解决方案的主要方面是摆脱不正确的滚动行为。

Follow-up:Firefox 错误?在我看来。

我现在仍然觉得这是移动版 Firefox 实现中的一个错误。我的猜测是,对于嵌套元素,视口计算在某种程度上是不正确的。

为了引起对该主题的关注,我建议您在 https://github.com/mozilla-mobile/fenix/issues 与 Mozilla 团队分享这些调查和文档。让我知道是否可以帮助您。