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

如何用Flexbox实现HTML表格中td的rowspan="2"效果

如何用Flexbox实现类似HTML表格td的rowspan="2"效果

我正在尝试用Flexbox的div替代HTML表格,大部分布局已实现,但无法模拟td的rowspan="2"效果。原HTML表格及对应CSS代码如下:

#divMain table {
  width: 100%;
  table-layout: fixed;
  border: 1px solid black;
}

#divMain table tr {
  height: 100px;
}

#divMain table td {
  vertical-align: top;
  border: 1px solid black;
  background: yellow;
}
<div id="divMain">
  <table>
    <tr>
      <td>blah</td>
      <td>blah</td>
      <td>blah</td>
    </tr>
    <tr>
      <td rowspan="2">blah</td>
      <td>blah</td>
      <td>blah</td>
    </tr>
    <tr>
      <td>blah</td>
      <td>blah</td>
    </tr>
  </table>
</div>

我目前写的Flexbox结构及CSS代码如下:

.table {
  display: flex;
  flex-flow: column nowrap;
  border: 1px solid black;
}

.row {
  display: flex;
}

.cell {
  height: 100px;
  vertical-align: top;
  border: 1px solid black;
  background: yellow;
  display: flex;
  flex: 1;
  justify-content: left;
  align-items: top;
}
<div class="table">
  <div class="row">
    <div class="cell">blah</div>
    <div class="cell">blah</div>
    <div class="cell">blah</div>
  </div>
  <div class="row">
    <div class="cell">blah</div>
    <div class="cell">blah</div>
    <div class="cell">blah</div>
  </div>
  <div class="row">
    <div class="cell">blah</div>
    <div class="cell">blah</div>
    <div class="cell">blah</div>
  </div>
</div>

解决方案

要实现类似rowspan="2"的垂直跨单元格效果,需要调整Flexbox的嵌套结构:将跨两行的单元格放在一个垂直方向的Flex容器中,同时把对应的两行右侧单元格整合到一个水平容器里,让它们和跨行列单元格处于同一层级的Flex布局中。

修改后的代码如下:

CSS代码

.table {
  display: flex;
  flex-flow: column nowrap;
  border: 1px solid black;
}

.row {
  display: flex;
}

.cell {
  height: 100px;
  vertical-align: top;
  border: 1px solid black;
  background: yellow;
  display: flex;
  flex: 1;
  justify-content: left;
  align-items: flex-start;
}

/* 垂直跨两行的容器 */
.cell-rowspan-2 {
  display: flex;
  flex-direction: column;
  flex: 1;
}
.cell-rowspan-2 .cell {
  height: auto;
  flex: 1;
  border-bottom: none;
}
.cell-rowspan-2 .cell:last-child {
  border-bottom: 1px solid black;
}

/* 整合两行右侧单元格的容器 */
.row-group {
  display: flex;
  flex-direction: column;
  flex: 2;
}
.row-group .row {
  flex: 1;
}

HTML代码

<div class="table">
  <div class="row">
    <div class="cell">blah</div>
    <div class="cell">blah</div>
    <div class="cell">blah</div>
  </div>
  <!-- 调整第二、第三行的结构 -->
  <div class="row">
    <!-- 跨两行的单元格容器 -->
    <div class="cell-rowspan-2">
      <div class="cell">blah</div>
    </div>
    <!-- 右侧两行单元格的整合容器 -->
    <div class="row-group">
      <div class="row">
        <div class="cell">blah</div>
        <div class="cell">blah</div>
      </div>
      <div class="row">
        <div class="cell">blah</div>
        <div class="cell">blah</div>
      </div>
    </div>
  </div>
</div>

这样就能实现和HTML表格中rowspan="2"完全一致的布局效果,跨行列的单元格会垂直占据两行的高度,右侧单元格则保持正常的两行排列。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 22:21:04