专栏首页python3ElementUI 实现el-table 列宽自适应

ElementUI 实现el-table 列宽自适应

一、概述

Element UI 是 PC 端比较流行的 Vue.js UI 框架,它的组件库基本能满足大部分常见的业务需求。但有时候会有一些定制性比较高的需求,组件本身可能没办法满足。最近在项目里就碰到了。

很多页面都需要用到表格组件el-table。如果没有给el-table-column指定宽度,默认情况下会平均分配给剩余的列。在列数比较多的情况,如果el-table宽度限定在容器内,单元格里的内容就会换行。强制不换行,内容要么在单元格内滚动,要么就会溢出或被截断。

产品想要的效果是:内容保持单行显示,列间距保持一致,表格超出容器允许水平滚动。el-table-column是支持设置固定宽度的,在内容宽度可预知的情况下,也能满足这个需求。问题就在于如何让列宽动态适应内容的宽度。在官方文档也没找到这样的选项,应该是组件本身不支持。

二、技术实现

通过插件v-fit-columns即可实现,列宽自适应。

安装插件

npm install v-fit-columns --save

引入

import Vue from 'vue';
import Plugin from 'v-fit-columns';
Vue.use(Plugin);

使用示例:

<el-table v-fit-columns>
  <el-table-column label="No." type="index" class-name="leave-alone"></el-table-column>
  <el-table-column label="Name" prop="name"></el-table-column>
  <el-table-column label="Age" prop="age"></el-table-column>
</el-table>

在el-table后面加v-fit-columns即可,其他的都不需要改。

先来看一下原始的table效果:

发现内容过多,已经开始换行了。

下面使用v-fit-columns

test.vue

<template>
  <div>
    <el-table v-fit-columns
      :data="tableData"
      border
      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="phone"
        label="手机号码">
      </el-table-column>
      <el-table-column
        prop="address"
        label="地址">
      </el-table-column>
      <el-table-column
        prop="describe"
        label="描述">
      </el-table-column>
    </el-table>
  </div>
</template>

<script>
  import Vue from 'vue';
  import Plugin from 'v-fit-columns';
  Vue.use(Plugin);
  export default {
    data() {
      return {
        tableData: [{
          date: '2016-05-02',
          name: '王小虎',
          phone:12345678910,
          address: '上海市普陀区金沙江路 1518 弄',
          describe:'松江区,位于上海市西南部,历史文化悠久,有着“上海之根” 的称呼。位于黄浦江上游,东与闵行区、奉贤区为邻,南、西南与金山区交界,西、北与青浦区接壤'

        }, {
          date: '2016-05-04',
          name: '王小虎',
          phone:12345678910,
          address: '上海市普陀区金沙江路 1517 弄FDSA',
          describe:'徐汇区,上海市辖区,位于上海中心城区的西南部,东北侧与黄浦区毗邻,东临黄浦江,与浦东新区隔江相望,西与闵行区分界,北与静安区、长宁区接壤。',
        }, {
          date: '2016-05-01',
          name: '王小虎',
          phone:12345678910,
          address: '上海市普陀区金沙江路 1519 弄54YGFDSF',
          describe:'浦东新区为上海市的一个市辖区,因地处黄浦江东而得名。浦东南与奉贤区、闵行区两区接壤,西与徐汇区、黄浦区、虹口区、杨浦区、宝山区五区隔黄浦江相望,北与崇明区隔长江相望;地势东南高,西北低,气温偏高、降水偏多、日照时数偏少'
        }, {
          date: '2016-05-03',
          name: '王小虎',
          phone:12345678910,
          address: '上海市普陀区金沙江路 1516 弄',
          describe:'黄浦区,隶属于上海市,地处黄浦江和苏州河合流处的西南端。北起苏州河,东、南濒黄浦江,西至成都北路、延安中路、陕西南路、肇嘉浜路、瑞金南路。'
        }]
      }
    },
    methods:{
    }
  }
</script>
<style scoped>
</style>

刷新页面,效果如下:

 可以看到,table下面出现了一个滚动条,可以向左向右拉动。

本文参考链接:

https://www.cnblogs.com/lzkwin/p/13575805.html

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • elementUI框架的 el-row el-col 与 el-table-column 用法区别!

    通过官方文档的说明,即布局的一行(el-row)的宽度分为24等份,通过span属性来确定每一个列(el-col)的宽度,占了24份中的几份。无论一个el-ro...

    acoolgiser
  • table-cell实现宽度自适应布局

    利用table-cell可以实现宽度自适应布局。 table-cell有一些比较好用的属性,比如垂直居中,自适应高度宽度等,为元素设置table-cell布局之...

    欲休
  • 对UI库的一些感触

    最近在赶一个后台系统,用的是elementUI,早之前写个太多的后台管理系统使用elementUI了,只是这一次有了一些感触。

    wade
  • 【Vue.js】Vue.js组件库Element的基础用法

    Element是一套为开发者、设计师和产品经理准备的基于 Vue 2.0 的桌面端组件库,是帮助网站快速成型的工具。

    魏晓蕾
  • vue实战电商管理后台

    这里我们使用了 ElementUI 组件 el-container、el-menu

    Remember_Ray
  • 教育平台项目前端:Vue.js 高级

    Vue cli 是基于 Vue 的应用开发提供的一个标准的脚手架工具,为应用搭建基础的框架结构,提供插件、开发服务、Preset、构建打包功能。

    RendaZhang
  • 基于SpringBoot打造在线教育系统(6)-- 二级分类模块UI篇

    这一节来做二级分类,为了快速开发,一级分类只做新增,暂时不考虑修改和删除,如果一定要删,就去数据库删吧。

    剽悍一小兔
  • Element Vue 框架的 Table 列宽度自适应解决方案

    cnguu
  • ElementUI实现表格加载树形数据教程

    关键代码,在el-table添加属性,:tree-props="{children: 'children'}",注意row必须命名为children,官网也进行...

    SmileNicky

扫码关注云+社区

领取腾讯云代金券