用 CSS Grid 实现视频列表响应式布局:设容器 display: grid,列定义为 repeat(auto-fill, minmax(280px, 1fr)),配合 gap 和 aspect-ratio: 16/9 保障视频不拉伸变形;结构用扁平 <section> 包裹语义化 <article>,内含 <video> 与 <h3>,禁用多余嵌套。
纯 HTML 无法实现响应式网格,必须配合 CSS display: grid。关键不是“怎么列出来”,而是“在不同屏幕下自动调整列数”,且要避免视频被拉伸变形。
aspect-ratio: 16 / 9(或用 padding-top 垃圾兼容法),否则缩放后黑边/裁剪不可控minmax(280px, 1fr) 而非固定列宽,确保小屏单列、中屏双列、大屏三或四列<video> 设 width: 100% —— 它会撑破容器;应设 width: 100%; height: 100%; object-fit: cover;
结构越扁平,Grid 控制越稳。不要嵌套多层 <div> 包裹视频,更别用 <table> 或浮动模拟网格。
<section class="video-grid">,每个视频项用 <article>(比 <div> 语义清晰,也方便后续加 schema)<article> 内:一个 <video> + 一个 <h3> 标题,别把标题塞进 <figure> 里再套一层 —— Grid 会误判子元素数量src 属性即可,不用 <source> 多格式(除非真要兼容 IE11)<section class="video-grid"> <article> <video controls> <source src="demo1.mp4" type="video/mp4"> </video> <h3>教程一</h3> </article> <article> <video controls> <source src="demo2.mp4" type="video/mp4"> </video> <h3>教程二</h3> </article></section>
错位通常不是 Grid 写错了,而是被其他样式劫持:比如全局重置了 box-sizing 却没同步到 <video>,或父级有 overflow: hidden 切掉了焦点框。
* { box-sizing: border-box; } 必加,否则 padding 和 border 会让 Grid 间距失控video { -webkit-transform: translateZ(0); }(解决部分机型点击后跳转全屏时布局闪动)grid-gap 还是挤在一起,检查是否被某个祖先元素的 margin 或 padding 撑开 —— Grid 不会自动吸收外部留白纯 Grid 布局不需要 JS,但真实项目中几乎都要加懒加载和错误降级。重点不是“能不能做”,而是“在哪加最轻量”。
立即学习“前端免费学习笔记(深入)”;
loading="lazy" 属性就够了,现代浏览器原生支持,<video> 也适用(Chrome 78+)onerror 回调替换为占位图:<video onerror="this.outerHTML="<img src='placeholder.jpg' alt='视频不可用'>"">
实际开发中,最难调的往往不是 Grid 本身,而是视频元数据缺失导致缩略图空白、或者 CDN 返回 404 后 fallback 图片尺寸不匹配容器。这些细节比“几行 CSS 实现响应式”更影响交付节奏。