【问题标题】:Scroll Snap Full Screen Always Scrolls 2 Sections滚动捕捉全屏始终滚动 2 部分
【发布时间】:2021-02-20 21:07:23
【问题描述】:

问题显示在这里:

https://codepen.io/team/css-tricks/pen/yLLqqgP

这是重要的部分:

    html {
        scroll-snap-type: y mandatory;
    }
    section {
        height: 100vh;
        scroll-snap-align: start;
    }

当设置高度 > 120 或类似的部分时,这个问题可以得到解决,但这是一个 hack。

当我用滚轮开始滚动时,它总是滚动两个部分,这使得整个逻辑无法使用。

我正在使用 Chrome:86.0.4240.183。

此 codepen 示例来自:https://css-tricks.com/practical-css-scroll-snapping/,这是一个非常知名的 CSS 示例资源。

【问题讨论】:

  • 这里有更多资源显示同样的问题:codepen.io/michellebarker/full/PowYKXJ
  • 有趣的是,它适用于 Microsoft Edge 版本 86.0.622.63,它也有 Webkit 引擎。这让整个情况变得更加奇怪。

标签: html css fullscreen scroll-snap


【解决方案1】:

不幸的是,这是 Chrome 中的一个已知错误,由使用 html 或具有 background-color 属性的容器作为滚动容器引起。它只影响滚轮而不影响触控板或移动设备上的触摸滚动。有关问题的演示,请参阅 this thread

最简单的解决方案是只使用嵌套容器来保存滚动,但奇怪的是,您可能会注意到滚动捕捉现在有一点延迟。这是当前实现可以做到的最好的:

* {
  padding: 0;
  margin: 0;
  box-sizing: border-box;
}

html {
  overflow: hidden;
}

.container {
  height: 100vh;
  width: 100%;
  overflow: auto;
  scroll-snap-type: y mandatory;
}

h1 {
  width: 100%;
  height: 100vh;
  scroll-snap-align: start;
  border: 2px solid black;
  display: flex;
  justify-content: center;
  align-items: center;
}
<div class="container">
  <h1>1</h1>
  <h1>2</h1>
  <h1>3</h1>
  <h1>4</h1>
</div>

不幸的是,一旦您意识到 100vh 在某些移动浏览器上也是非静态的(阅读:非常笨拙),由于实施了缩回 UI,可能会导致无样式的间隙,如 html 层所示在容器填满剩余空间之前通过。今年我花了好几个小时来解决这个问题,但还没有想出一个完全令人满意的解决方案,在大多数情况下将媒体查询重置为html,并针对任何使用 JS 的边缘情况。

这是您可以为此添加的一种可能的媒体查询:

@media (hover: none) and (pointer: coarse) {
  html {
    overflow: auto;
    scroll-snap-type: y mandatory;
  }

  .container {
    height: auto;
    display: contents;
    scroll-snap-type: unset;
  }
}

【讨论】:

  • 你如何看待像 Fullpage JS 这样的 JS 解决方案?
  • 除非绝对必要,否则我尽量避免使用 JS 进行任何样式设置。 Fullpage 似乎通过完全阻止 UI 撤回来解决 100vh 问题,这不是很好的 IMO,而且在移动设备上的性能也可能有点迟钝。也许我的回答太悲观了;我仍然更愿意在这种状态下使用本机滚动 API,而不是恢复到完整的 JS 解决方案并降低性能。当真的我想阻止vh 大小的元素在移动设备上跳跃时,我用window.innerHeight CSS Var 覆盖100vh,并接受它们并不总是与屏幕完美对齐。跨度>
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-08-07
  • 1970-01-01
  • 2011-07-04
  • 2019-07-14
  • 2021-12-04
  • 2021-07-10
  • 1970-01-01
相关资源
最近更新 更多