使用Media Query复刻YouTube页面,右侧内容自适应截断问题求助
问题解决思路及修复方案
核心问题分析
- Media Query 逻辑错误:
@media (min-width: 1199px) and (max-width: 801px)的条件矛盾(最小宽度大于最大宽度),该规则永远不会触发,导致801px-1199px宽度区间的布局失效。 - 固定宽度导致溢出:
.video-info设置了固定宽度(250px/350px),当容器宽度不足以容纳时,内容会超出视口被截断。 - 缺少容器内边距:
.video-grid没有左右内边距,内容直接贴紧视口边缘,容易出现截断。
具体修复步骤
修正Media Query顺序与逻辑
将矛盾的Media Query替换为有效的区间规则,确保各宽度区间的布局正确触发:/* 删除原错误规则,替换为以下 */ @media (min-width: 801px) and (max-width: 1199px) { .video-grid { grid-template-columns: 1fr 1fr 1fr; } }移除固定宽度,改用自适应布局
删除.video-info的固定宽度设置,让它通过Grid的1fr列自适应容器宽度,避免溢出;可选添加max-width限制最大宽度,防止内容过宽:.video-info { display: inline-block; /* 移除 width: 250px; */ max-width: 350px; } /* 修改对应Media Query中的width设置 */ @media (min-width: 800px) { .video-info { /* 移除 width: 350px; */ max-width: 350px; } /* 其他样式保留 */ }添加容器内边距
给.video-grid添加左右内边距,让内容与视口边缘保持间距,同时用box-sizing: border-box确保内边距不会增加容器总宽度:.video-grid { display: grid; grid-template-columns: 1fr 1fr 1fr; column-gap: 16px; row-gap: 40px; padding: 0 16px; box-sizing: border-box; }
修改后的完整CSS代码
.thumbnail-1 { width: 100%; } .video-info-grid { display: grid; grid-template-columns: 50px 1fr; } .video-info { display: inline-block; max-width: 350px; } .thumbnail-row { margin-bottom: 8px; position: relative; } .video-grid { display: grid; grid-template-columns: 1fr 1fr 1fr; column-gap: 16px; row-gap: 40px; padding: 0 16px; box-sizing: border-box; } @media (max-width: 800px) { .video-grid { grid-template-columns: 1fr 1fr; } } @media (min-width: 801px) and (max-width: 1199px) { .video-grid { grid-template-columns: 1fr 1fr 1fr; } } @media (min-width: 1200px) { .video-grid { grid-template-columns: 1fr 1fr 1fr 1fr; } } @media (min-width: 800px) { .video-info { max-width: 350px; } .video-title { font-size: 16px; line-height: 24px; } .video-author, .video-stats { font-size: 14px; } }
额外说明
- 确保
body元素没有设置overflow: hidden,否则即使修复布局,内容仍可能被隐藏。 box-sizing: border-box是确保内边距不撑大容器的关键,避免容器超出视口范围。
内容的提问来源于stack exchange,提问作者Lixin Li
相关产品推荐
相关产品推荐

