当您尝试放大时,CSS 滚动捕捉卡住

Posted

技术标签:

【中文标题】当您尝试放大时,CSS 滚动捕捉卡住【英文标题】:CSS scroll snapping stucks when you try to zoom in 【发布时间】:2019-07-20 23:00:24 【问题描述】:

CSS-scroll-snap 运行良好。但是,当您用一根手指在移动设备上滚动时,将该手指静止在屏幕上并用另一根手指向相反方向滚动(如缩放↕),然后滚动捕捉将卡住。 (无论在哪个浏览器上)

当您在滚动时按住 Ctrl 键时,它甚至可以在桌面上运行。

我不知道这是否是一个常见问题,但我找不到任何修复或解决此问题的方法。

有什么建议吗?

自己试试吧:

<!DOCTYPE html>
    <html lang="en" dir="ltr">
        <head>
            <meta charset="utf-8">
            <meta name='viewport' content='width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0' />
            <title></title>
            <style media="screen">
                .container
                    scroll-snap-type: y mandatory;
                    height: 50vh;
                    width: 50%;
                    overflow-y: scroll;
                

                .content 
                    scroll-snap-align: center;
                    height: 50vh;
                    width: 100%;
                
            </style>
        </head>
        <body>
            <div class="container">
                <div class="content" style="background:blue;">
                    1
                </div>
                <div class="content" style="background:red;">
                    2
                </div>
                <div class="content" style="background:green;">
                    3
                </div>
                <div class="content" style="background:orange;">
                    4
                </div>
            </div>
        </body>
    </html>

【问题讨论】:

不要让它占据整个屏幕的宽度。 @kish Wdym?它甚至不是整个屏幕的宽度。 您可以使用 javascript 来解决问题吗?还是只能是 css? @Sirence 尽可能只使用 css。 【参考方案1】:

(编辑:这不是一个相关的答案,因为我误解了这个问题。)

我在 Firefox (v72) 中运行了您的代码 sn-p 并没有看到您所描述的行为。然后我在 Chrome (v79) 中运行它,我确实看到了有问题的行为。我使用的是 Windows 10。(顺便说一句,不错的 sn-p。)

我能描述它的最好方式是,在缩放页面后,元素的滚动与其父容器不对齐。看起来它已经完成了滚动,但随后它会滚动并捕捉到不同的元素,导致它看起来像是被卡住了。

这似乎是一个特定于浏览器的错误。我猜这是 Chrome/Blink 的问题。

编辑:也许我看到的东西与你不同。我所能做的就是分享我所看到的。

火狐:

铬:

【讨论】:

我可以在 Firefox 72.0.1 上重现该错误 我可以在 Firefox 69、Firefox 72 和 Chrome 66 以来的最低版本中重现该错误。也在最新的 Opera 版本 67.0.3564.0 中 当您在滚动时按下 Ctrl 键然后停止滚动(缩放),这些框会一直停留在它们所在的位置,直到您再次正常滚动。然后它会自行修复(在每个缩放步骤中)。 哦,我明白了。我误解了bug的步骤。现在我正在尝试同样的事情,我看到了同样的行为。很有意思。我正在考虑删除我的答案。

以上是关于当您尝试放大时,CSS 滚动捕捉卡住的主要内容,如果未能解决你的问题,请参考以下文章

有啥方法可以禁用 CSS 滚动捕捉点?

CollapsingToolbarLayout正在滚动并卡住

到达顶部时CSS滚动捕捉溢出身体

CSS 仅在 iOS 中滚动捕捉

css 在-webkit上滚动:当您使用overflow:hidden时,在移动设备上滚动无法正常工作

CSS 滚动捕捉 API?