如何仅用HTML和CSS实现TikTok式视频滚动吸附效果?
仅用HTML和CSS实现全屏视频列表的滚动吸附效果
完全可以实现!借助CSS原生的滚动吸附属性,就能做出类似TikTok或YouTube Shorts的滚动停驻效果,全程不需要JavaScript。
修改后的完整代码
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Videos</title> <style> body { background-color: #090909; margin: 0; padding: 0; /* 设置垂直方向强制滚动吸附 */ scroll-snap-type: y mandatory; overflow-y: scroll; height: 100vh; } .videos { height: 100%; } .video-box { display: flex; align-items: center; justify-content: center; /* 每个视频容器占满视口高度 */ height: 100vh; /* 吸附对齐到容器顶部 */ scroll-snap-align: start; /* 禁止滚动跳过容器 */ scroll-snap-stop: always; } .video-box video { box-sizing: border-box; padding: 8px; max-height: 100vh; max-width: 100%; } </style> </head> <body> <section class="videos"> <div class="video-box"> <video preload="none" poster="vert1.png" autoplay muted loop playsinline> <source src="vert1.mp4" type="video/mp4"> </video> </div> <div class="video-box"> <video preload="none" poster="vert2.png" autoplay muted loop playsinline> <source src="vert2.mp4" type="video/mp4"> </video> </div> <div class="video-box"> <video preload="none" poster="vert1.png" autoplay muted loop playsinline> <source src="vert1.mp4" type="video/mp4"> </video> </div> <div class="video-box"> <video preload="none" poster="vert2.png" autoplay muted loop playsinline> <source src="vert2.mp4" type="video/mp4"> </video> </div> </section> </body> </html>
核心CSS属性解析
scroll-snap-type: y mandatory:给滚动容器(这里是body)开启垂直方向的强制吸附,滚动时会自动对齐到最近的吸附点。scroll-snap-align: start:指定每个视频容器的顶部与滚动容器的顶部对齐,保证视频全屏展示时的停驻效果。scroll-snap-stop: always:防止滚动时跳过任意一个视频容器,确保每次滚动只停在一个完整的视频页面上。.video-box设置height: 100vh:让每个视频容器占满整个视口高度,实现单屏一个视频的布局。
兼容性说明
这套方案兼容所有现代浏览器(Chrome、Firefox、Safari、Edge),无需担心兼容性问题。
内容的提问来源于stack exchange,提问作者Marcin Wróblewski
相关产品推荐
相关产品推荐

