React里用CSS Grid布局,子项在移动端堆叠时突然变宽了怎么办?
在做移动端适配时遇到怪问题,用Grid布局的卡片在桌面端显示正常,但手机横屏时子项突然撑开到最大宽度,看起来好挤。我给容器加了max-width: 100%和width: 100%,也试过调整gap,但都没用。
这是我的代码片段:
function Gallery() {
return (
<div className="grid-container">
{[1,2,3,4].map(i => (
<div key={i} className="grid-item">
<img src={image${i}.jpg} alt="" />
</div>
))}
</div>
)
}
.grid-container {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
gap: 1rem;
}
@media (max-width: 768px) {
.grid-item { max-width: 100% }
}
手机横屏(800px左右)时每个卡片宽度突然变成250px,导致两列就撑满容器了,但按minmax设置应该能更灵活收缩才对…是不是哪里漏了移动端适配的设置?
minmax(250px, 1fr)在窄屏下卡住最小宽度的问题。auto-fit配合minmax确实会创建尽可能多的列,但每个格子不会小于 250px —— 所以在 800px 横屏时刚好塞下两列就满了,没法再分更多列,而且也不会缩小。但你说“应该能更灵活收缩”,说明你其实是希望小屏时单列垂直堆叠,而不是硬撑两列。这时候别用
auto-fit死磕,直接用媒体断点切布局更靠谱。改成这样:
同时删掉你在
.grid-item上加的max-width: 100%冗余规则,没用。核心思路:移动端优先,大屏才启用 Grid 多列,小屏直接单列堆着最稳。复制过去试试,横屏不会再挤了。