Grid 中如何实现跨行跨列(合并单元格)?

方法 1:基于网格线

.grid {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  grid-template-rows: repeat(3, 100px);
}

.item-a {
  grid-column: 1 / 4;  /* 从第1条线到第4条线,跨3列 */
  grid-row: 1 / 2;     /* 跨1行 */
}

.item-b {
  grid-column: 1 / 3;  /* 跨2列 */
  grid-row: 2 / 4;     /* 跨2行 */
}

方法 2:span 关键字

.item {
  grid-column: span 2;   /* 跨2列 */
  grid-row: span 3;       /* 跨3行 */
}

/* 也可以指定起始位置 */
.item {
  grid-column: 2 / span 2;  /* 从第2条线开始,跨2列 */
}

方法 3:grid-area(简写)

.item {
  /* grid-row-start / grid-column-start / grid-row-end / grid-column-end */
  grid-area: 1 / 1 / 3 / 4;  /* 行1到3,列1到4 */
}

实际示例:仪表盘布局

.dashboard {
  display: grid;
  grid-template-columns: repeat(4, 1fr);
  grid-template-rows: repeat(3, auto);
  gap: 16px;
}

.widget-large {
  grid-column: span 2;
  grid-row: span 2;
}

.widget-wide {
  grid-column: span 2;
}

.widget-tall {
  grid-row: span 2;
}

.widget-normal {
  /* 默认 1×1 */
}
┌──────────┬──────────┬──┐
│          │          │  │
│  large   │  wide    ├──┤
│          ├──────────┤  │
│          │  │  │    │  │
├──────────┴──┴───────┴──┘

注意事项

同分类其他题目