首页 > 解决方案 > 为什么我的位置:sticky 在 iOS 上不起作用?

问题描述

我正在编写位于移动屏幕底部的粘性通知栏。我希望该栏卡在用户屏幕的底部,直到用户到达该栏在代码中实际定位的滚动位置(就在页面页脚之前)。我几乎从这个页面复制了“医生”的例子:https ://alligator.io/css/position-sticky/ 我的问题是:在我的页面上,当使用 Android 设备或通过调整台式计算机上的浏览器宽度来模拟移动设备时,该栏工作正常。然而,在 iOS 上,该栏不是粘性的,即它只是坐在它的位置上,并且在到达之前不会粘在屏幕底部。这适用于 Safari 和 Google Chrome。奇怪的是:在前面提到的 alligator.io 页面上,它在我的 iOS 设备上运行良好。

我怀疑这是与栏周围的代码有关的某种 Webkit 问题,但我无法隔离它。我已经尝试通过将我的代码尽可能地调整为 alligator.io 中的示例来进行调试,但我无法让它工作。我也尝试在父元素中寻找任何溢出:自动 - 没有成功。我已经尝试解决这个问题几个小时,并且厌倦了这个问题,并且可以用另一双眼睛帮助我找到我忽略的东西。

#jobalarm_mobile {
    display: table;
    font-size: 18px;
    width: 100%;
    height: 40px;
    background: #ff8400;
    color: white;
    font-weight: 400;
    text-align: center;
    position: -webkit-sticky;
    position: sticky;
    bottom: -50px;
    align-self: flex-end;
}
<a href="#" class="jobAlertToggle">
    <div id="jobalarm_mobile">
        <i class="fa fa-bell"></i>
        <span>Jobalarm aktivieren</span>
        <label class="switch">
            <input type="checkbox">
            <span class="slider round"></span>
        </label>
    </div>
</a>

您可以访问我正在处理的实时页面(应客户要求隐藏,请私下与我联系)。只需启动任何(建议的)搜索,该栏就会弹出(如果您使用的是 iOS,则不会弹出...)在此先感谢您的帮助。

标签: ioscsswebkitsticky

解决方案


回答自己的问题时,我觉得自己像个白痴,但是我弄清楚了导致问题的原因。我希望这将帮助开发人员面临同样的问题,因为我找不到任何定义这种行为的地方。

如您所见,在我的代码中,元素周围有一个包装器(特别是链接),我在其上使用我的位置:粘性:

<a href="#" class="jobAlertToggle">
<div id="jobalarm_mobile">
    <i class="fa fa-bell"></i>
    <span>Jobalarm aktivieren</span>
    <label class="switch">
        <input type="checkbox">
        <span class="slider round"></span>
    </label>
</div>
</a>

出于某种原因,这对于桌面版的 Chrome 或 Firefox 以及 Android 来说都不是问题,因为它们似乎忽略了这个容器,可能是因为它没有定义任何定位行为。这就是它适用于其他设备的原因。但是,iOS 不会忽略容器,因此将 div 相对于其父容器(即链接)定位。出于测试目的删除链接后,它可以在所有设备上运行。


推荐阅读