React中使用CSS网格布局时,为什么在移动端会出现列重叠?
最近在做一个产品卡片列表的响应式布局,用CSS网格在桌面端显示三列没问题,但手机端测试时两列突然重叠在一起了,调整过断点还是不行…
代码结构是这样的:
import './Grid.css';
function ProductGrid() {
return (
{[1,2,3,4,5,6].map(n => (
产品{n}
))}
);
}
export default ProductGrid;
对应的CSS用了网格布局:
.grid-container {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(250px, 1fr));
gap: 20px;
}
@media (max-width: 768px) {
.grid-container {
grid-template-columns: repeat(2, 1fr);
}
}
手机横屏(900px)时正常显示两列,但竖屏(360px)时两列却挤在一起了,gap间距也没了,是哪里没考虑到呢?
直接改成
grid-template-columns: repeat(auto-fit, minmax(250px, 1fr)),去掉手机断点也能自适应。如果坚持手动控制断点,记得加
min-width: 0防止内容撑开列宽。minmax(250px, 1fr)这里,手机竖屏宽度不够时,250px 的最小值会让列挤在一起。我一般直接用minmax(auto, 1fr)或者设置更小的最小宽度。修改后的 CSS:
这样既能保证内容不重叠,又不会浪费空间。