element el-table 高度自适应

本文解决el-table高度不适应不同分辨率及浏览器缩放问题,通过max-height、calc()和onresize事件,教你如何让表格动态调整。关键在于设置max-height,配合动态获取container高度并应用到table上。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

element el-table 高度自适应

解决el-table的高度不能适应不同电脑的分辨率,也不能跟随浏览器的高度变化而变化的问题

效果:
在这里插入图片描述

前言

在这台电脑开发时设置了el-table的高度为500px,但是在小电脑,就看不到table后面几条数据了,浏览器高度缩小后,也看不到table后面几条数据。怎么让el-table的高度可以跟随变化呢?这篇文章的重点就是这个了。

一、解决思路

利用以下几点解决:
1.el-table的max-height属性
2.css的calc算法
3.dom的clientHeight
4.window.onresize

二、使用步骤

1.在el-talbe设置max-height

 :max-height="tableHeight"

2.在data定义 tableHeight

 tableHeight:600,  //表格的最大高度

3.设置el-table外部的div高度为动态高度

 .content {
    width: 100%;
    padding: 20px;
    box-sizing: border-box;
    height: calc(100% - 3rem);
}

4.利用div的clientHeight获取该div的高度,设置tableHeight为此高度

mounted(){
  //获取容器当前高度,重设表格的最大高度
  this.getTableMaxHeight(); 
  let _this = this;
  window.onresize = function () {//用于使表格高度自适应的方法  
      _this.getTableMaxHeight();//获取容器当前高度,重设表格的最大高度
  }
  },
methods: {
  //获取容器当前高度,重设表格的最大高度
  getTableMaxHeight(){
    this.$nextTick(function () {
      let box = document.querySelector(".content").attributes
      let box_clientHeight = box[0].ownerElement.clientHeight;
      this.tableHeight = box_clientHeight - 100;
    })
  },
}

-------------------------------------手动分割线

还是太年轻了,其实完全可以很简单的一个参数就能搞定全部:
height=“calc(100% - 10rem)”
就是sass基础 很简单的calc算法。
!](https://img-blog.csdnimg.cn/c1783b56daf74ee2b0c27f5f3be6ac99.png)

### Element UI el-table 自适应高度解决方案 为了使 `el-table` 组件能够自适应高度并保持良好的用户体验,可以通过创建一个自定义指令来动态调整表格的高度。这种方法不仅减少了代码冗余,还提高了项目的可维护性和灵活性。 #### 使用自定义指令实现表单高度自动适配 通过监听窗口大小变化事件,在每次触发时重新计算表格容器的实际可用空间,并相应更新表格的高度属性[^1]: ```javascript // 定义全局指令 v-resize Vue.directive('resize', { bind(el, binding) { const handleResize = () => { let windowHeight = window.innerHeight; let otherElementsHeight = /* 计算其他元素占用的空间 */; // 设置 table 的最大高度 el.style.maxHeight = `${windowHeight - otherElementsHeight}px`; }; // 初始化时执行一次 handleResize(); // 添加 resize 事件监听器 window.addEventListener('resize', handleResize); // 解绑函数用于清理资源 el.__handleResize__ = handleResize; }, unbind(el) { // 移除 event listener 防止内存泄漏 if (el && el.__handleResize__) { window.removeEventListener('resize', el.__handleResize__); } } }); ``` 接着可以在模板中应用此指令到目标表格上: ```html <template> <div class="table-container"> <!-- 应用自定义指令 --> <el-table v-resize :data="tableData"></el-table> </div> </template> <style scoped> .table-container { position: relative; /* 确保父级定位 */ } </style> ``` 此外,还可以进一步优化逻辑以支持更复杂的场景,比如当页面内存在多个折叠面板或其他交互控件影响布局结构的情况下,确保这些变动也能被及时响应和处理[^2]。
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值