CSS滚动-仅当子容器大于父容器时才能滚动到顶部

lvmkulzt  于 5个月前  发布在  其他
关注(0)|答案(1)|浏览(65)

我使用scroll-snap-type: y在容器中实现垂直滚动,目标是让每个子元素的顶部与父容器的顶部对齐。
但是,我面临一个问题,子元素也会捕捉到父元素容器的底部。我想确保只有每个子元素的顶部捕捉到父元素的顶部,即使子元素比父元素大。
在我的具体例子中,我有一个高度为100vh的父容器。在这个容器中,有两个子元素。第一个子元素的高度为120vh,第二个子元素的高度为100vh。滚动时,我希望避免第二个子元素的顶部与父元素的底部对齐的任何捕捉点。
有没有一种方法可以配置CSS滚动捕捉,只将这些较大的子元素的顶部捕捉到父容器的顶部?

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

.panel {
  width: 100vw;
  scroll-snap-align: start;
  height: 120vh;
  background: red;
  display: flex;
  justify-content: center;
  color: white;
  align-items: center;
}

.panel2 {
  width: 100vw;
  height: 100vh;
  scroll-snap-align: end;
  background: pink;
  display: flex;
  justify-content: center;
  color: black;
  align-items: center;
}

个字符

已编辑

我想澄清一下向下滚动和向上滚动所需的滚动行为:

向下滚动:

当用户向下滚动时,每个子元素的顶部都应该与父容器的顶部对齐。例如,当用户从Panel One向下滚动到Panel Two时,我希望Panel Two的顶部与 Package 器的顶部对齐,其间没有任何额外的对齐点。

向上滚动:

当用户从面板二向上滚动到面板一时,面板一的顶部应该与 Package 的顶部对齐。
关键是避免子元素的底部(如Panel One的底部)与 Package 器底部对齐的任何捕捉点。
捕捉应该只发生在与父容器顶部对齐的子元素顶部,而不是子元素的任何其他点。

a14dhokn

a14dhokn1#

从我对你的问题的了解来看,下面的代码片段应该给予你想要的行为。我已经添加了一个div,它带有一个scroll-container类,并带有height: fit-content;属性,以确保容器的高度适应其内容。

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

.panels {
  width: 100vw;
  display: flex;
  justify-content: center;
  align-items: center;
}

.panel {
  height: 120vh;
  scroll-snap-align: start;
  background: red;
  color: white;
}

.panel2 {
  height: 100vh;
  scroll-snap-align: end;
  background: pink;
  color: black;
}

.scroll-container {
  scroll-snap-type: y mandatory;
  height: fit-content; /* Ensure the container's height adapts to content */
}

个字符
如果这不是你想要的,你能不能更清楚地说明你想要创建的具体结果?当有人向下滚动和向上滚动时,你希望发生什么?

相关问题