【热】如何实现el-table列宽随内容长度自适应最小宽度

非常火急火燎的来写这篇博客!!因为自己一开始想实现这个效果时在网上查了很久查了很多资料和博客都没有找到能有效达到效果的方法,要么就是别人说有效但是我这里会报错而且难以解决。最后终于被我自己给摸索出来了!

应用场景

很多时候,在做表格时,我们希望列项的宽度随着内容宽度自适应调整,而不希望换行。

但在数据导入前,我们不知道内容宽度是多少,所以没办法直接设置确定的min-width去保证内容不换行。比如这样(这只是个我随便写的表格例子,不用太纠结于数据):

我需要达到的效果是,列宽根据我内容项里最长的一项调整长度实现下面这样子的效果:


我们的思路是

  • 动态计算每列的宽度:遍历数据数组,获取每单元格内容的宽度,并加上列内边距,然后取最大宽度作为列宽。
  • 动态创建一个<span>标签,将其设置为不可见、绝对定位并放置在屏幕外,以便获取文本的实际宽度。然后将文本内容赋值给<span>,将其添加到页面上,获取其宽度后再移除。

通过以上方法,就可以实现 el-table 列宽随内容长度自适应最小宽度的效果。

根据这个思路,实现一个方法getColunmnWidth供表格列项使用。

javascript 复制代码
  function getColumnWidth(prop) {
    const minWidth = 80; // 最小宽度
    const padding = 16; // 列内边距

    const contentWidths = assessments.map((item) => {
      const value = item[prop] ? String(item[prop]) : "";
      const textWidth = getTextWidth(value);
      return textWidth + padding;
    });

    const maxWidth = Math.max(...contentWidths);

    return Math.max(minWidth, maxWidth);
  }
  function getTextWidth(text) {
    const span = document.createElement("span");
    span.style.visibility = "hidden";
    span.style.position = "absolute";
    span.style.top = "-9999px";
    span.style.whiteSpace = "nowrap";
    span.innerText = text;
    document.body.appendChild(span);
    const width = span.offsetWidth + 5;
    document.body.removeChild(span);
    return width;
  }

在列表代码中,直接传入参数名称,调用方法即可

html 复制代码
<el-table-column
    prop="name"
    label="姓名"
    :min-width="getColumnWidth('name')"
/>

亲测有效!!!

然后呢,大家可以像我一样把这个方法进行封装供多个项目/多个页面的表格使用。

完整代码和封装代码我就不发出来了,希望大家可以看懂了之后自己实现出来,拒绝直接复制粘贴!

相关推荐
脾气有点小暴17 分钟前
uniapp开发APP 内嵌外部 HTTPS 链接的实现方案
vue.js·uni-app
CodeCraft Studio19 分钟前
JavaScript图表库 DHTMLX Diagram 6.1 重磅发布:全新PERT模式上线,项目可视化能力再升级!
开发语言·javascript·ecmascript·dhtmlx·图表开发·diagram·javascript图表库
shuaijie051839 分钟前
当表格数据量过大的时候,如何使用不分页进行展示
javascript·vue.js·ecmascript
JosieBook1 小时前
【Vue】03 Vue技术——Vue.js 入门学习笔记:Hello World 案例详解
vue.js·笔记·学习
How_doyou_do1 小时前
常见的设计模式
前端·javascript·设计模式
Gomiko2 小时前
JavaScript DOM 原生部分(五):事件绑定
开发语言·前端·javascript
巴拉巴拉~~2 小时前
Flutter 通用下拉选择组件 CommonDropdown:单选 + 搜索 + 自定义样式
开发语言·javascript·ecmascript
Можно2 小时前
深入理解 JavaScript 函数:分类、特性与实战应用
开发语言·javascript
lionliu05192 小时前
JavaScript 变量声明最佳实践
前端·javascript·vue.js
计算机毕设VX:Fegn08952 小时前
计算机毕业设计|基于springboot + vue酒店管理系统(源码+数据库+文档)
数据库·vue.js·spring boot·后端·课程设计