Vue3 + TypeScript + Element Plus + el-table 表格滚动条的使用说明

一、显示浏览器的滚动条

显示效果:

一直显示滚动条

模板设置特点:

使用 div 包裹 el-table

html 复制代码
<template>
  <div>
    <el-table
      ......
      style="width: 100%; height: 100%">
      ......
    </el-table>
  </div>
</template>

二、显示表格内置的滚动条

显示效果:

光标没有移动到表格上,不会显示滚动条

光标移动到表格上,才会显示滚动条

模板设置特点:

不使用 div 包裹 el-table

html 复制代码
<template>
  <el-table
    ......
    style="width: 100%; height: 100%">
    ......
  </el-table>
</template>

细心观察,会发现去掉 div 包裹 el-table 后,表格的行背景颜色失效了。

因为这里表格的行背景颜色是通过 v-bind() 实现的,原理是 v-bind() 转换为 CSS 变量(Custom Properties),并在组件根元素动态注入,这里的根元素就是 div

html 复制代码
<script setup lang="ts" name="ReagentTable">
......

// 过期提醒颜色,CSS 变量,通过 v-bind() 绑定给元素样式
// const cssColorVar = ref("#fdd4e5");
// const cssColorObj = ref({ color: "skyblue" });
const expirationReminderColor = useSystemOptionKeyVal("ResourcesExpirationReminderColor");

......
</script>

<template>
  <el-table
    ......
    style="width: 100%; height: 100%">
    ......
  </el-table>
</template>

<style scoped lang="scss">
// 过期颜色
:deep .el-table .expire-row {
  // 基础变量,推荐使用双引号包裹
  // background-color: v-bind("cssColorVar");
  // 基础变量,可以省略双引号
  // background-color: v-bind(cssColorVar);
  // 对象变量,必须使用双引号包裹
  // background-color: v-bind("cssColorObj.color");
  // 对象变量,必须使用双引号包裹,属性 systemOptionValue 为 Ref,需 .value 取值
  background-color: v-bind("expirationReminderColor.systemOptionValue.value");
}
</style>

去掉 div 包裹 el-table 后,该组件就没有根元素了,【v-bind() 转换为 CSS 变量到根元素】,这里转换不了,导致行背景颜色失效,background-color: v-bind("expirationReminderColor.systemOptionValue.value");获取不到CSS样式变量

三、最终解决方案(显示表格内置的滚动条+行背景颜色)

1、保持原来的结构不变,始终保留 div 包裹 el-table,以确保 v-bind() 正常工作。

2、通过 CSS 样式设置,屏蔽浏览器的滚动条,显示表格内置的滚动条。

1)、div 添加类名 <div class="table-container">

2)、设置 div 样式

html 复制代码
.table-container {
  height: 100%; /* 只要设置容器高度为100%,就可以隐藏浏览器的滚动条 */
}

3)确保el-table 的高度也为 100%

优化使用属性设置:height="100%"

也可使用样式设置:style="width: 100%; height: 100%"

html 复制代码
<script setup lang="ts" name="ReagentTable">
......

// 过期提醒颜色,CSS 变量,通过 v-bind() 绑定给元素样式
// const cssColorVar = ref("#fdd4e5");
// const cssColorObj = ref({ color: "skyblue" });
const expirationReminderColor = useSystemOptionKeyVal("ResourcesExpirationReminderColor");

......
</script>

<template>
  <div>
    <el-table
      ......
      style="width: 100%; height: 100%">
      ......
    </el-table>
  </div>
</template>

<style scoped lang="scss">
.table-container {
  height: 100%; /* 只要设置容器高度为100%,就可以隐藏浏览器的滚动条 */
}

// 过期颜色
:deep .el-table .expire-row {
  // 基础变量,推荐使用双引号包裹
  // background-color: v-bind("cssColorVar");
  // 基础变量,可以省略双引号
  // background-color: v-bind(cssColorVar);
  // 对象变量,必须使用双引号包裹
  // background-color: v-bind("cssColorObj.color");
  // 对象变量,必须使用双引号包裹,属性 systemOptionValue 为 Ref,需 .value 取值
  background-color: v-bind("expirationReminderColor.systemOptionValue.value");
}
</style>

显示效果:

光标没有移动到表格上,不会显示滚动条

光标移动到表格上,才会显示滚动条

相关推荐
椒哥10 分钟前
一天被问几十次"允许",我统计了 517 次,然后写了个插件
前端·javascript·github
风骏时光牛马12 分钟前
生成一个AI稳定性治理及疑难问题分析标题,只需要一个标题,不需要其他的任何文本。
前端
莫西干式秃头27 分钟前
用 AI + threejs 写了个浏览器里的 3D 动作游戏《武来》:砍怪、放技能、开 SU7
前端·人工智能·three.js
kyriewen41 分钟前
我测了 6 种防请求竞态的写法:只有 1 种真能打
前端·javascript·程序员
孟健44 分钟前
用 WorkBuddy 做个人名片网页,挂上开源设计技能后效果完全不同了
前端·人工智能·ai编程
IT_陈寒1 小时前
SpringBoot自动配置的坑,这次终于爬出来了
前端·人工智能·后端
LuHang2 小时前
从天地图切换到高德地图:一次真实的底图迁移实战
前端·vue.js·cesium
用户360055579002 小时前
Kestrel_VLLM - 27 · 寄存器常驻与融合发射:两次「少发一次」
前端
前端小万2 小时前
用"道法术器"重构你和 AI 的协作方式
前端·人工智能·程序员
鶴哥只手遮天2 小时前
Angular 22 源码级深度解析-第 06 章 模板指令全解:`ɵɵelementStart`、`ɵɵproperty`、`ɵɵadvance` 与绑定指令
前端·开源·angular.js