el-table有没有办法让列宽自适应,但是有一个maxWidth?

比如font-size是14px,列宽要求是小于等于60倍的font-size(假设)。我看网上有相应的函数,但是评论说会比较卡,有没有比较优质的方案。

阅读 3.6k
1 个回答

EleUI原生是不支持的,因为做了很多自动适配宽度的特性,所以在提供一个 max-width 属性计算起来会很麻烦。但是我记得社区有人开发过 max-width 相关的 plugin 但是我找不到了。

如果简单要实现的话,可以写一个动态计算属性,按照内容宽度给 el-table-item 设置 width 属性。
比如说:

<template>
  <el-table :data="tableData" style="width: 100%">
    <el-table-column prop="date" label="日期"></el-table-column>
    <el-table-column prop="name" label="姓名"></el-table-column>
    <el-table-column prop="address" label="地址" :width="addressWidth" show-overflow-tooltip></el-table-column>
  </el-table>
</template>
<script>
export default {
  data() {
    return {
      tableData: [
        { date: '2016-05-02', name: '王小虎', address: '上海市普陀区金沙江路 1518 弄' },
        { date: '2016-05-04', name: '王小虎', address: '上海市普陀区金沙江路 1517 弄' },
        { date: '2016-05-01', name: '王小虎', address: 'Lorem ipsum dolor, sit amet consectetur adipisicing elit. Iste eveniet numquam quas sapiente incidunt velit maxime iusto autem officia. Nisi maxime quidem unde molestias praesentium, ipsam in culpa corrupti tenetur.' },
        { date: '2016-05-03', name: '王小虎', address: '上海市普陀区金沙江路 1516 弄' }
      ]
    }
  },
  computed:{
    // 地址列宽度
    addressWidth(){
      const maxWidth = 420
      const fontSize = 14
      const realWidth = this.tableData.reduce((prev, curr) => {
        return Math.max(curr.address.length * fontSize, prev)
      }, -Infinity)
      return Math.min(realWidth, maxWidth) + "px"
    }
  }
}
</script>

主要是你需要去计算好 el-table 的宽度就是所有的 el-table-item 的最大宽度。除非说你把某一列的 width 不做设置,让一个列的宽度自适应填充表格的剩余控件。
但是大部分情况下我们很有可能会超出 el-table 的最大宽度。比如说在一些系统缩放 150% 的笔记本浏览的情况下。 所以需要你去分析实际业务使用场景,然后去做适配。

👉 在线Demo

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏