display: grid 或 flex 控制列宽。这样既能保证 scroll-snap-align 生效,又可自由控制每行尺寸、间距和吸附基准线(例如用 scroll-margin-top 做微调)。
真机测试中最容易被忽略的细节
即使结构和样式都对,在 iOS Safari 上仍可能“滑过”某一行——这不是代码错误,而是 WebKit 滚动引擎对连续快速 flick 的惯性处理策略。此时:
- 不要依赖
scroll-snap-stop: always(它只能防止跳过,解决不了停不准的问题)。 - 确保所有“行”元素的高度严格一致(用
height,不用min-height)。 - 禁用
position: sticky头部(它会破坏滚动容器的 snap 上下文)。 - 真机上检查是否启用了
-webkit-overflow-scrolling: touch;(这个在 iOS 上曾必需,现已废弃;现代 Safari 下可省略,但如果遇到问题,再加回去试试)。
最终效果是否吸附,不要看 DevTools 的样式面板,而要看手指松开后,页面是否真的停在了行边界上——那才是唯一可信的判断依据。













