【问题标题】:Prevent vertical scroll when using anchors to scroll horizontally使用锚点水平滚动时防止垂直滚动
【发布时间】:2021-03-06 03:07:17
【问题描述】:

我有一个单栏网站,有点像社交媒体,帖子在彼此下方。 有些帖子是简单的文字,有些是图片,有些是图片库。

对于这个图片库,我只显示第一张图片,然后让锚点指向隐藏在视口中的其他图片(帖子本身是一个带有 overflow-x:auto 和 flex-wrap:nowrap 的 flex 元素和子图片是 flex: 0 0 auto 和 max-width 以适合我的帖子视图)。

所以提要看起来像这样,其他 x 被隐藏,每个都具有所述图片的 ID 以在没有 JS 的情况下进行滚动:
|X |
|X |
|X>||| |X |

我在这个项目中故意避免使用 JS,这样的画廊也可以工作,但是每当我点击这些锚点时,除了水平滚动到所需的图像之外,它还会垂直滚动到目标图像的顶部。

在保留水平滚动的同时单击锚点时可以防止垂直跳跃吗?

【问题讨论】:

  • 您能提供到目前为止您工作的演示/代码sn-p吗?使用目标链接,您可以使用:target css 选择器来更改目标图像的水平位置,以便只要它被定位,它就会出现在您的内容中。一旦有示例代码可供检查和编辑,向您展示我的意思会更容易。
  • 我仍然无法重现您的问题,但也许这个关于 :target 的代码笔仍然可以帮助您:codepen.io/ingosteinke/pen/abBaoaL
  • Avi Kohn 使用输入和标签而不是链接目标的替代解决方案:codepen.io/AMKohn/pen/EKJHf

标签: css scroll anchor


【解决方案1】:

如果没有看到您的代码,似乎很难仅使用链接目标来构建纯 CSS 滑块。您可以使用类似于Chris Coyier's hashtag-links-padding 的伪元素:target::before 对目标图像进行偏移,

但也有一个基于替代方法的pure CSS image slider by Avi Kohn,使用inputlabel 来实现水平图像滑块而不跳滚动位置。

【讨论】: