【发布时间】:2021-08-26 03:12:30
【问题描述】:
我正在开发一个可滚动的卡片库。 为此,我使用了 CSS 网格结构。 类似的东西:
<div class="cs-wrapper">
<div class="cs-container">
<div id="card-1" class="cs-card-container">
<div class="cs-card">
</div>
</div>
<div id="card-2" class="cs-card-container">
<div class="cs-card">
</div>
</div>
...
</div>
</div>
使用css
.cs-content {
height:100vh;
position: relative;
display: grid;
grid-template-columns: var(--cs-container-grid-gap) 1fr var(--cs-container-grid-gap);
grid-gap: var(--container-grid-gap);
z-index:10;
}
.cs-container {
display: grid;
position: relative;
grid-gap: 0vw;
grid-template-columns:repeat(auto-fill, 100vw);
grid-auto-flow: column;
grid-auto-columns: calc( 100% / var(--cs-cards-per-screen));
grid-template-rows: 1fr;
-webkit-overflow-scrolling: touch;
scroll-behavior: smooth;
overflow-scrolling: touch;
overflow-x: scroll;
scroll-snap-type: x mandatory;
}
.cs-container > div {
height: 100%;
width: 100%;
position: relative;
margin:0;
overflow: auto;
scroll-snap-align: start;
}
.cs-card-container {
height: 100%;
width: 100%;
position: relative;
margin:0;
overflow: auto;
}
现在代码按预期工作,卡片定位正确,滚动正常。
但是,移动设备上的惯性/动量滚动往往会滚动得有点快,在移动设备上滚动时,您必须非常明智地滑动才能到达下一张卡片,而不是跳过 1 或 2 张卡片(您必须能够滑动如果您愿意,可以使用多张卡片,因此不能在每张卡片上停止)。
现在我正在寻找一种方法来减慢滚动速度,以便它变得可用
如果可能,我更喜欢纯 CSS 的解决方案。我尝试过的事情:
玩弄
.cs-container {
perspective: 1px;
transform-style: preserve-3d;
}
.cs-container > div {
transform: translateZ(-1px) scale(2);
margin-top:-10px;
margin-left:-10px;
top:-10px;
}
这似乎确实减慢了滚动速度,但是滚动的行为不可预测,因为 div 现在在后台并且滚动速度减半。一旦 cs-container 滚动到最后只有一半的卡片已经滚动(滚动 snapp 现在也关闭了半张卡片)
Javascript
我尝试了几个我找到的 javascript 解决方案,但它们都依赖于使用鼠标滚轮完成的滚动,因此对于移动设备这不起作用
【问题讨论】:
-
您可以查看
overscroll-behavior,但没有您正在寻找的微调行为;它似乎是打开或关闭:(。