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

求助:如何使用HTML和CSS实现指定网格区域布局?

实现目标错落网格布局的解决方案

你的代码问题在于同时给网格容器定义了行比例,又为子元素设置固定高度,这会冲突网格的布局规则,导致元素无法呈现预期的错落效果。目标布局的核心是让元素1和4分别占据两行高度,元素2和3各占一行的矮高度,以下是两种可行的修正方案:

方案一:使用grid-row控制行跨越

这种方式直接通过行跨越属性指定元素占据的行数,逻辑清晰:

.grid-container {
  display: grid;
  gap: 3px;
  grid-template-columns: 1fr 1fr;
  /* 两行高度对应你原来的616px和947-616=331px,保持高度比例一致 */
  grid-template-rows: 616px 331px;
  background-color: red;
}

.child {
  background: white;
  display: grid;
  place-items: center;
  font-size: 3em;
  font-weight: bold;
}

#one {
  /* 让元素1从第1行跨越到第3行(即占据两行) */
  grid-row: 1 / 3;
}

#four {
  /* 让元素4从第1行跨越到第3行 */
  grid-row: 1 / 3;
}

HTML保持不变:

<div class="grid-container">
  <div id="one" class="child">1</div>
  <div id="two" class="child">2</div>
  <div id="three" class="child">3</div>
  <div id="four" class="child">4</div>
</div>

方案二:使用grid-template-areas定义区域

通过自定义网格区域,直观映射目标布局的结构:

.grid-container {
  display: grid;
  gap: 3px;
  /* 定义区域布局:第一行是one+two,第二行是one+four,第三行是three+four */
  grid-template-areas: 
    "one two"
    "one four"
    "three four";
  /* 前两行高度总和为947px,第三行对应剩余高度,保持比例 */
  grid-template-rows: 616px 331px;
  grid-template-columns: 1fr 1fr;
  background-color: red;
}

.child {
  background: white;
  display: grid;
  place-items: center;
  font-size: 3em;
  font-weight: bold;
}

#one { grid-area: one; }
#two { grid-area: two; }
#three { grid-area: three; }
#four { grid-area: four; }

两种方案都能实现你要的布局效果,核心是利用CSS Grid的行跨越特性,而非给子元素硬设固定高度,避免和网格容器的行规则冲突。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 19:52:02