当前位置: 首页 > news >正文

网页前端CSS实现表格3行平均分配高度,或者用div Flexbox布局

要解决表格单元格高度不均的问题,可以通过以下CSS调整实现3行平均分配高度:

<!DOCTYPE html>
<html>
<head><style>body {margin:0;height:100vh}table {width:100%;height:100%;border-collapse:collapse;table-layout:fixed}tr {height:33.33%}  /* 强制三行平分高度 */td {text-align:center;vertical-align:middle;border:1px solid #ddd}button {padding:10px 20px}</style>
</head>
<body><table><tr><td>第一行<br>文字<br>内容</td></tr><tr><td><button>按钮2</button></td></tr><tr><td><button>按钮3</button></td></tr></table>
</body>
</html>

关键修改点:

  1. 添加table-layout:fixed确保表格布局固定
  2. 使用tr {height:33.33%}强制每行占1/3高度
  3. 设置vertical-align:middle使单元格内容垂直居中

========
可以使用CSS的Flexbox或Grid布局来实现三行平均分配高度,无需手动计算百分比。以下是几种替代方案:

1. Flexbox布局(推荐)

<!DOCTYPE html>
<html>
<head><style>body {margin:0;height:100vh;display:flex;flex-direction:column}div {flex:1;display:flex;justify-content:center;align-items:center;border:1px solid #ddd}</style>
</head>
<body><div><button>按钮1</button></div><div><button>按钮2</button></div><div><button>按钮3</button></div>
</body>
</html>

特点:

  • flex:1自动平分剩余空间
  • 无需计算具体百分比值
  • 天然支持内容高度自适应

2. Grid布局

<!DOCTYPE html>
<html>
<head><style>body {margin:0;height:100vh;display:grid;grid-template-rows:repeat(3,1fr)}div {display:grid;place-items:center;border:1px solid #ddd}</style>
</head>
<body><div><button>按钮1</button></div><div><button>按钮2</button></div><div><button>按钮3</button></div>
</body>
</html>

特点:

  • 1fr单位自动分配可用空间
  • 代码更简洁直观
  • 适合复杂布局场景

3. 传统table布局

<!DOCTYPE html>
<html>
<head><style>body {margin:0;height:100vh}table {width:100%;height:100%;border-collapse:collapse;table-layout:fixed}td {text-align:center;vertical-align:middle;border:1px solid #ddd}</style>
</head>
<body><table><tr><td><button>按钮1</button></td></tr><tr><td><button>按钮2</button></td></tr><tr><td><button>按钮3</button></td></tr></table>
</body>
</html>

特点:

  • 浏览器自动计算行高
  • 兼容性最好
  • 适合简单表格需求

以上方法均无需手动计算33.33%,由CSS引擎自动处理空间分配。现代项目推荐优先使用Flexbox或Grid方案。 么用TR每行设成flex无效?

在HTML/CSS中,<tr>元素直接应用Flexbox布局无效的原因主要有以下几点:

  1. 表格元素的特殊显示类型
    <tr>作为表格行元素,其默认display值为table-row,这种显示类型会强制忽略Flexbox相关属性。表格结构(<table><tr><td>)需要保持原生表格布局特性才能正常工作。

  2. Flexbox与表格布局的冲突机制
    当给表格元素设置display: flex时,会破坏表格的固有结构:

    • 表格会失去display: table特性
    • 子元素不再表现为表格行/单元格,而是变成Flex子项
    • 导致border-collapse等表格专属属性失效。
  3. CSS规范的限制
    Flexbox容器要求子元素必须是块级或行内块元素,而<tr>作为表格行元素不属于这两类,因此无法建立有效的Flex格式化上下文。

解决方案(按推荐顺序):

  1. 嵌套Flex容器
    <td>内部嵌套使用Flex布局:

    <table><tr><td><div class="flex-container">内容</div></td></tr>
    </table>
    
    .flex-container {display: flex;justify-content: center;align-items: center;height: 100%;
    }
    
  2. 改用CSS Grid布局
    直接对表格元素应用Grid布局可保留表格结构:

    table {display: grid;grid-template-rows: 1fr 1fr 1fr; /* 三行等分 */
    }
    
  3. 完全放弃表格结构
    使用<div>模拟表格布局:

    <div class="flex-table"><div class="flex-row">...</div>
    </div>
    
    .flex-table { display: flex; flex-direction: column }
    .flex-row { display: flex; flex: 1 }
    

关键区别在于:Flexbox设计用于流式布局,而表格布局需要保持特定的结构上下文才能生效。若需合并单元格特性,推荐采用方案1的嵌套方式。

http://www.dtcms.com/a/319134.html

相关文章:

  • Springboot2+vue2+uniapp 实现搜索联想自动补全功能
  • vue2.如何给一个页面设置动态的name。不同路由使用一样的组件。页面不刷新怎么办?
  • 小米前端笔试和面试
  • Redis 分布式Session
  • 内存杀手机器:TensorFlow Lite + Spring Boot移动端模型服务深度优化方案
  • 前端三大核心要素以及前后端通讯
  • 机器学习之随机森林(Random Forest)实战案例
  • 数据结构第8问:什么是树?
  • 深入理解String类:揭秘Java字符串常量池的优化机制
  • word生成问题总结
  • 【智能协同云图库】第六期:基于 百度API 和 Jsoup 爬虫实现以图搜图
  • 北京-4年功能测试2年空窗-报培训班学测开-第七十天-面试第一天
  • 国内主流数据集成厂商有哪些?有那些免费的数据集成平台?
  • 容器 vs 虚拟机
  • 机器学习核心算法与实践要素(全篇)
  • 汽车流通行业4S门店生存性指标:零服吸收率
  • 0基础法考 单选50条错题总结
  • 安卓系统属性之androidboot.xxx转换成ro.boot.xxx
  • 分布式面经
  • 虚幻GAS底层原理解剖七 (ASC)
  • Day 6: CNN卷积神经网络 - 计算机视觉的核心引擎
  • 多场景两阶段分布式鲁棒优化模型、数据驱动的综合能源系统
  • PostgreSQL面试题及详细答案120道(61-80)
  • 59.螺旋矩阵II
  • 恒虚警检测(CFAR)仿真:杂波边缘与多目标场景分析
  • 目标检测数据集 - 疟疾检测数据集下载「包含VOC、COCO、YOLO三种格式」
  • 微算法科技(NASDAQ:MLGO)利用集成学习方法,实现更低成本、更稳健的区块链虚拟货币交易价格预测
  • RocketMQ概览
  • Kotlin中String的==相等比较符
  • STM32HAL 快速入门(一):点灯前的准备 —— 从软件安装到硬件原理