响应式网格组件的列间距在小屏幕下怎么变窄了?
我在用CSS Grid做布局组件时遇到问题。按照文档写了个响应式网格,设置了gap: 2rem,但在手机横屏模式(900px宽)下,列间距突然变成原来的一半,看起来很挤。
我尝试过用媒体查询调整gap值:
@media (max-width: 900px) {
.grid {
grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
gap: calc(1rem + 1vw); // 这里改过好几个值
}
}
但发现当列数减少到2列时,左右两边的间距还会被压缩,是不是auto-fit有什么隐藏规则?
用浏览器调试工具看,元素间距确实显示1rem,但视觉效果还是不对…
1. 别用calc结合rem和vw来调整gap,这会导致间距不可控。改成分段设置:
2. 你看到间距被压缩是因为auto-fit会让内容撑满容器。在主题里加个padding就解决了:
3. 建议把minmax里的200px改成min(200px, 100%),防止小屏下元素被挤压变形:
这三个改动一起用,保证间距在任何屏幕下都正常。我上周刚用这套方案修了个客户网站的类似问题,效果稳如老狗。
建议用padding代替gap来控制间距,配合box-sizing可以更精确控制视觉效果。给你贴个改好的例子:
这样改的话,外层容器用padding留白,内部元素用padding控制间距,不会受auto-fit的计算影响。如果还要适配更小的屏幕,加个媒体查询调整padding值就行。之前我也被gap坑过好几次,现在都改用padding方案了。