Ant Design Vue Table 表格内容高度自适应+固定表头踩坑

news2024/11/29 8:48:31

前言

对于非专业前端开发者来使用 Ant Design UI 组件来开发企业级后台管理系统来说是非常不错的选择,但这并不意味着我们能够用好这个框架,因为 UI 交互上和有许多细节上的问题对于非专业前端来说并不容易解决,最近在使用 Table 组件时就遇到一个小坑,特此记录一下解决的方法

功能

场景:固定表头 + 表格内容高度自适应

在日常开发中表格是我们使用的组件之一,因为服务端的每一张数据表都有可能要在前端的 Table 表格中做展示,如果表的数据比较多,我们基本都会用分页做展示并且通常会提供几个不同的分页条数选择,比如【20,50,100】,在选择100每页的时候,我们基本都要滚动下拉查看数据,这个时候如果表头不固定看数据就比较难受,所以在大数据量大表格中基本都需要提供固定表头列的功能来增强用户体验

实现

我们看下 Ant Design Vue 官网提供的例子:

<template>
  <a-table 
    sticky 
    :scroll="{ x: 1500 }"
    :columns="columns" 
    :data-source="data" >
    </a-table>
</template>

注意:为了使用滚动表格,每个 columns 的列宽都要指定,避免自适应的时候列伸缩导致错位堆叠

上面的用法看起来非常简单,但其实是有问题的,因为 scroll 里面的 x 值是写死的,这样会导致表格并不能自适应伸缩,我们来看下改进的方案:

<template>
  <a-table 
    sticky 
    :scroll="{x:'100%', y:'calc(100vh-250px)'}"
    :columns="columns" 
    :data-source="data" >
    </a-table>
</template>

解释一下:

x 横轴我们使用了宽度为 100% 来根据列宽实际宽度来自适应伸缩

y 纵轴我们使用了(动态计算浏览器可视高度 - 250px)以此来达到 y 轴的自适应伸缩,用 250px 是因为我们表格的位置坐标,通常距离顶部和底部通常都会留一些距离出来,这个可根据实际情况做调整。

上面的方案看起来没问题,但在实际测试时,发现在部分场景下会导致底部出现重复的x 轴滚动条,图示如下,底部有两个滚动条同时出现:

复现步骤:

1,先最大化浏览器窗口,然后表格滚动条向下滚动一部分

2,接着缩回原样,此时一切都正常

3,然后将滚动条滚动到表格底部,这个时候底部就会出现两个x轴滚动条

这个其实影响到是不大,只会在上面的步骤中触发,用浏览器 debug 了下 and design原生的 ant-table-sticky-scroll的样式如下:

发现其 bottom 属性的设置失效了,具体原因可能是被父包裹组件中属性覆盖了。

解决

知道了上述的原因后,解决也其实比较简单了,放弃原始表格上 sticky 属性的设置,改为我们自定使用 vue 的 deep 样式穿透来覆盖解决即可,最终的代码如下:

<template>
  <a-table 
    :scroll="{x:'100%', y:'calc(100vh-250px)'}"
    :columns="columns" 
    :data-source="data" >
    </a-table>
</template>

<style scoped>

  :deep(.ant-table-wrapper .ant-table-header){
    position: sticky;
    top: 0;
    z-index: 3;
  }
  
  :deep(.ant-table-wrapper .ant-table-sticky-scroll){
    position: sticky;
    bottom: 0;
    z-index: 3;
  }

</style>

总结

可以看到问题的解决步骤,其实还是有一定难度的,不仅需要知道前端的 html+css+js的基础知识和 chrome 浏览器的 debug功能,还需要对使用的vue框架有所了解才行,虽然解决过程比较曲折,但在解决之后我们就会有种 “山重水复疑无路,柳暗花明又一村”的豁然开朗的快感

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1159913.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

实战:基于TC3XX STM模块的时间片程序开发

1. 前言 STM模块,全称为系统定时器模块,可以看作是汽车ECU中的一个计时器。STM模块能够精确地测量和跟踪时间。 在ECU软件中,STM模块通常用于创建定期任务,比如每10毫秒执行一次的任务。这就像是一个闹钟,每隔10毫秒就会响一次,提醒ECU执行某个特定的任务。 这里的10m…

分享3个适合大学生使用的白板笔记软件,学习效率蹭蹭上涨!

现如今许多大学生不在使用纸和笔进行做笔记了&#xff0c;通通改成了各种笔记软件&#xff0c;如何选择一个好用的笔记软件&#xff0c;是当代大学生较为头疼的事&#xff0c;小编今天通过这篇文章&#xff0c;为你推荐3款宝藏级笔记软件&#xff0c;大家一定要收藏好&#xff…

18.自监督视觉`transformer`模型DINO

文章目录 自监督视觉`transformer`模型DINO总体介绍DINO中使用的SSL和KD方法multicrop strategy损失函数定义`teacher`输出的中心化与锐化模型总体结构及应用reference欢迎访问个人网络日志🌹🌹知行空间🌹🌹 自监督视觉transformer模型DINO 总体介绍 论文:1.Emerging …

变融启程 视界已破——“新主流·新未来”四川广播电视台战略分享会在成都举行

2023年11月1日下午&#xff0c;2024年度“新主流新未来”四川广播电视台战略分享会在成都举行。从三年前的“变融”开启融合、转型之路&#xff0c;到两年前以“进化”应对变化探索媒体融合之路&#xff0c;再到去年塑造“新视界”全屏聚合传播矩阵&#xff0c;四川广播电视台不…

MIT6.5830 Lab1-GoDB实验记录(四)

MIT6.5830 Lab1-GoDB实验记录&#xff08;四&#xff09; – WhiteNights Site 标签&#xff1a;Golang 读写缓冲区我是一点思路都没有&#xff0c;所以得单独开篇文章记录。 实验补充 了解buffer、序列化与反序列化 这里的序列化&#xff0c;简单来说类似于把一个很长的字符…

C/C++ sizeof

介绍 sizeof 是一个关键字、操作符&#xff0c;也是一个编译时运算符 作用&#xff1a;返回一个对象或者类型所占的内存字节数 使用方法 sizeof(type_name);//sizeof(类型) sizeof(object);//sizeof(对象) 注意&#xff1a; sizeof 操作符不能用于函数类型&#xff0c;不…

爆肝将近 10 万字讲解 Node.Js 详细教程

1. Node.Js 环境概述 Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境&#xff0c;用于在服务器端运行 JavaScript。它使用了一个事件驱动、非阻塞式I/O的模型&#xff0c;使得其轻量且高效。Node.js 的包管理器 npm 是全球最大的开源库生态系统。Node.js 能够响应大…

Java架构师知识产权与标准化

目录 1 导学2 知识产权概述3 保护期限4 知识产权人的确定4 侵权判断5 标准划分想学习架构师构建流程请跳转:Java架构师系统架构设计 1 导学 2 知识产权概述 知识产权是指公民、法人、非法人单位对自己的创造性智力成果和其他科技成果依法享有的民事权。是智力成果的创造人依…

AI“走深向实”,蚂蚁蚁盾在云栖大会发布实体产业「知识交互建模引擎」

数字化起步晚、数据分散稀疏、专业壁垒高、行业知识依赖「老师傅」&#xff0c;是很多传统产业智能化发展面临的难题。2023年云栖大会上&#xff0c;蚂蚁集团安全科技品牌蚁盾发布“知识交互建模引擎”&#xff0c;将实体产业知识与AI模型有机结合&#xff0c;助力企业最快10分…

二进制基础

最近开始入坑系统安全大坑&#xff0c;调转方向开始了解pwn&#xff0c;那就要补一些那少得可怜的底层基础啦 先学几个单词&#xff1a; exploit&#xff1a;用于攻击的脚本与方案payload&#xff1a;攻击载荷&#xff0c;是目标进程被劫持控制流的数据&#xff08;精心构造的…

Python画图之HelloKitty

Python-turtle画出HelloKitty&#xff08;有趣小游戏&#xff09; 一、效果图二、安装库1.常用镜像源2.库下载 三、Python代码 一、效果图 二、安装库 1.常用镜像源 1. 豆瓣http://pypi.douban.com/simple/ 2. 清华大学&#xff1a;https://pypi.tuna.tsinghua.edu.cn/simple…

智能视频监控平台EasyCVR出现偶发通道在线,但是无法播放的情况要怎么解决?

视频云存储/安防监控EasyCVR视频汇聚平台基于云边端智能协同&#xff0c;支持海量视频的轻量化接入与汇聚、转码与处理、全网智能分发、视频集中存储等。流媒体视频平台EasyCVR拓展性强&#xff0c;视频能力丰富&#xff0c;具体可实现视频监控直播、视频轮播、视频录像、云存储…

Scrum of Scrums大规模敏捷管理流程

​​​​​​​Leangoo领歌​​​​​​​是一款永久免费的专业的敏捷开发管理工具&#xff0c;提供端到端敏捷研发管理解决方案&#xff0c;涵盖敏捷需求管理、任务协同、进展跟踪、统计度量等。 Leangoo领歌上手快、实施成本低&#xff0c;可帮助企业快速落地敏捷&#xff0c…

Linux学习之进程二

目录 进程状态 R (running)运行状态与s休眠状态&#xff1a; disk sleep&#xff08;深度睡眠状态&#xff09; T (stopped)&#xff08;暂停状态&#xff09; t----tracing stop(追踪状态) X死亡状态&#xff08;dead&#xff09; Z(zombie)-僵尸进程 孤儿进程 进程优…

Android问题

这里面要加入 ,加入前是点击待君登录直接跳回手机主界面了 加入上述代码即可 Android之Inflate() Inflate()作用就是将xml定义的一个布局找出来&#xff0c;但仅仅是找出来而且隐藏的&#xff0c;没有找到的同时并显示功能。 android上还有一个与Inflate()类似功能的…

【AI视野·今日CV 计算机视觉论文速览 第274期】Tue, 24 Oct 2023

AI视野今日CS.CV 计算机视觉论文速览 Tue, 24 Oct 2023 Totally 138 papers &#x1f449;上期速览✈更多精彩请移步主页 Interesting: &#x1f4da;Wonder3D, 基于交叉扩散模型的单图像三维形状生成。(from 香港大学) website:https://www.xxlong.site/Wonder3D/ Daily Co…

Flutter 04 按钮Button和事件处理、弹框Dialog、Toast

一、按钮组件 1、按钮类型&#xff1a; 2、按钮实现效果&#xff1a; import package:flutter/material.dart;void main() {runApp(const MyApp()); }class MyApp extends StatelessWidget {const MyApp({Key? key}) : super(key: key);overrideWidget build(BuildContext co…

X64(64位)汇编指令与机器码转换原理

X64&#xff08;64位&#xff09;汇编指令与机器码转换原理 1 64位寻址形式下的ModR/M字节1.1 寻址方式1.2 寄存器编号 2 汇编指令转机器码2.1 mov rcx, 1122334455667788h2.2 mov rcx,[r8]与mov [r8],rcx2.3 mov rcx,[r8r9*2] 本文属于《 X86指令基础系列教程》之一&#xff…

重温云栖,分享十年成长:我和云栖的故事

文章目录 前言活动背景我和云栖的交际历届峰会主题2009201020112012201320142015201620172018202120222023 技术带来的变化工作生活关注的领域 后记 前言 云栖大会&#xff0c;前身可追溯到2009年的地方网站峰会&#xff0c;2011年演变为阿里云开发者大会&#xff0c;2015年正式…

python线程(进程子单位)

进程是由CPU给分配的执行单元&#xff0c;比较消耗空间和内存 创建、使用线程 import threading# 进程 # 线程 from time import sleepdef download():list1 ["girl.png", "boy.png", "child.png"]for l in list1:print(l)sleep(1.5)print(&qu…