You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

CSS网格布局问题:两列转两行失效求助

问题根源

你当前代码的核心问题是所有网格项都通过grid-column-start/end、grid-row-start/end硬绑定了固定的网格位置,相当于把每个元素钉死在指定的单元格里。即便你调整容器的列数,这些元素也不会自动重新排列,只会在固定位置收缩,自然无法实现换行效果。

解决方案1:媒体查询实现响应式

在特定屏幕宽度下(比如768px),修改容器的列数为1列,同时重置顶部和底部左右模块的网格定位属性,让它们自动占据整行:

* {
   margin: 0;
   padding: 0;
   box-sizing: border-box;
}
body {
   height: 100vh;
   width: 100vw;
   background-color: #E6E6E3;
   overflow-x: hidden;
}
.container {   
   height: 100%;
   display: grid; 
   grid-template-columns: 1fr 1fr; 
   grid-template-rows: auto;
   gap: 0px;
} 
.top_left {
   height: 100px; 
   background-color: white;
   grid-column: 1 / 2;
   grid-row: 1 / 2;
   border: 1px solid red;
}
.top_mid {
   background-color: #36454F;
   grid-column: 1 / 3;
   grid-row: 2 / 3;
}
.top_right {
   height: 100px; 
   background-color: white; 
   grid-column: 2 / 3;
   grid-row: 1 / 2;
   border: 1px solid blue;
}
.main {
   max-width: 80%;
   margin: auto;
   background-color: white; 
   grid-column: 1 / 3;
   grid-row: 3 / 5;
   border-left: 1px solid #78BE21;
   border-right: 1px solid #78BE21;
}
.bot_left {
   height: 150px; 
   background-color: #BCD9ED; 
   grid-column: 1 / 2;
   grid-row: 5 / 6;
   border-top: 1px solid #191919;      
   border-bottom: 1px solid #191919;
}
.bot_right {
   height: 150px; 
   background-color: #7F8778; 
   grid-column: 2 / 3;
   grid-row: 5 / 6;
   border-top: 1px solid #191919;      
   border-bottom: 1px solid #191919;
}
.bot {
   height: 250px; 
   background-color: deepskyblue;
   grid-column: 1 / 3;
   grid-row: 6 / 8;
}

/* 添加媒体查询,小屏幕下调整布局 */
@media (max-width: 768px) {
  .container {
    grid-template-columns: 1fr; /* 改为1列 */
  }
  .top_left, .top_right, .bot_left, .bot_right {
    grid-column: 1 / -1; /* 占满整列 */
    grid-row: auto; /* 取消固定行定位,自动排列 */
  }
  /* 重新调整小屏幕下的行顺序(可选,根据需求调整) */
  .top_left { grid-row: 1; }
  .top_right { grid-row: 2; }
  .top_mid { grid-row: 3; }
  .main { grid-row: 4 / 6; }
  .bot_left { grid-row: 6; }
  .bot_right { grid-row: 7; }
  .bot { grid-row: 8 / 10; }
}
解决方案2:无媒体查询的自适应网格(推荐)

使用repeat(auto-fit, minmax(300px, 1fr))让网格自动根据屏幕宽度调整列数,同时移除所有元素的固定grid-row定位,仅对需要跨列的元素设置grid-column: 1 / -1(占满整行):

* {
   margin: 0;
   padding: 0;
   box-sizing: border-box;
}
body {
   height: 100vh;
   width: 100vw;
   background-color: #E6E6E3;
   overflow-x: hidden;
}
.container {   
   height: 100%;
   display: grid; 
   /* 自动适配列数,最小宽度300px,超出自动均分 */
   grid-template-columns: repeat(auto-fit, minmax(300px, 1fr)); 
   grid-template-rows: auto;
   gap: 0px;
} 
.top_left {
   height: 100px; 
   background-color: white;
   border: 1px solid red;
}
.top_mid {
   background-color: #36454F;
   grid-column: 1 / -1; /* 占满整行 */
}
.top_right {
   height: 100px; 
   background-color: white; 
   border: 1px solid blue;
}
.main {
   max-width: 80%;
   margin: auto;
   background-color: white; 
   grid-column: 1 / -1; /* 占满整行 */
   border-left: 1px solid #78BE21;
   border-right: 1px solid #78BE21;
   /* 保持原有高度范围,用grid-row: auto / span 2; 代替固定行 */
   grid-row: auto / span 2;
}
.bot_left {
   height: 150px; 
   background-color: #BCD9ED; 
   border-top: 1px solid #191919;      
   border-bottom: 1px solid #191919;
}
.bot_right {
   height: 150px; 
   background-color: #7F8778; 
   border-top: 1px solid #191919;      
   border-bottom: 1px solid #191919;
}
.bot {
   height: 250px; 
   background-color: deepskyblue;
   grid-column: 1 / -1; /* 占满整行 */
   grid-row: auto / span 2;
}

这种方案不需要媒体查询,网格会自动根据屏幕宽度调整列数:当屏幕宽度大于600px(300px*2)时显示两列,小于600px时自动切换为一列,顶部和底部的左右模块会自动换行。

内容的提问来源于stack exchange,提问作者user20045789

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 00:25:21