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

TypeScript二维数组转10×10HTML表格:div实现失效问题求助

解决用
实现10×10网格布局的问题

嘿,我完全懂你的困扰——用<table>和<td>能轻松搞定10行10列的表格,但换成<div>后就变成了100个垂直堆叠的独立方块,根本没有行列结构。这其实是因为<div>默认是块级元素,每个都会占满父容器的宽度,自动换行到下一行。咱们用CSS的Grid或Flexbox就能完美解决这个问题,下面给你两种实用方案:

方案一:CSS Grid(最推荐,适合明确行列的网格)

CSS Grid是专门为网格布局设计的,代码简洁且可控性强。你可以直接把100个单元格<div>放在一个容器里,通过Grid属性强制每行显示10个:

TypeScript 代码(生成网格结构)

const gridSize = 10;
const container = document.getElementById('grid-container')!;

// 生成100个单元格
for (let row = 0; row < gridSize; row++) {
  for (let col = 0; col < gridSize; col++) {
    const cell = document.createElement('div');
    cell.classList.add('grid-cell');
    cell.textContent = `${row}, ${col}`; // 可选:显示坐标
    container.appendChild(cell);
  }
}

CSS 样式(实现网格布局)

#grid-container {
  display: grid;
  grid-template-columns: repeat(10, 1fr); /* 10列,每列宽度均等 */
  gap: 1px; /* 可选:单元格之间的间距 */
  border: 1px solid #333; /* 可选:网格外边框 */
  max-width: fit-content; /* 让容器宽度适配内容 */
}

.grid-cell {
  width: 40px;
  height: 40px;
  display: flex;
  align-items: center;
  justify-content: center;
  background-color: #f5f5f5;
  border: 1px solid #ddd;
}

方案二:Flexbox(兼容旧浏览器的备选方案)

如果需要兼容不支持Grid的旧浏览器,Flexbox也是个不错的选择,通过flex-wrap: wrap让元素自动换行:

TypeScript 代码(结构和上面一致)

const gridSize = 10;
const container = document.getElementById('grid-container')!;
container.classList.add('flex-grid');

for (let i = 0; i < gridSize * gridSize; i++) {
  const cell = document.createElement('div');
  cell.classList.add('grid-cell');
  cell.textContent = `${Math.floor(i/10)}, ${i%10}`;
  container.appendChild(cell);
}

CSS 样式

.flex-grid {
  display: flex;
  flex-wrap: wrap; /* 超出容器宽度自动换行 */
  width: calc(10 * (42px + 1px)); /* 计算总宽度:10个单元格(宽42px)+ 间距 */
  gap: 1px;
  border: 1px solid #333;
}

.grid-cell {
  width: 40px;
  height: 40px;
  padding: 0;
  box-sizing: border-box; /* 确保边框和内边距不额外增加宽度 */
  display: flex;
  align-items: center;
  justify-content: center;
  background-color: #f5f5f5;
  border: 1px solid #ddd;
}

为什么原来的<div>不行?

默认情况下,<div>的display属性是block,这意味着每个<div>都会单独占据一行,宽度撑满父容器。而Grid和Flexbox通过改变元素的布局模式,强制它们在同一行排列,达到表格的行列效果。

内容的提问来源于stack exchange,提问作者Mohamed-Ali Elakhrass

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 03:58:19