ElementUi el-table 美化暂无数据状态

本文介绍了如何美化ElementUi的el-table组件在无数据时的状态。在数据过长出现横向滚动条的情况下,原始的无数据提示会被滚动条遮挡,影响页面美观。通过一些修改,实现了无数据提示始终居中显示,提升用户体验。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言:当表格数据过长的时候,会出现横向滚动条,这个时候暂无数据就需要拉动滚动条到中间才能看到,导致页面及其不美观,所有,请看下方

正常的空值状态如下

在这里插入图片描述

经过修改后

在这里插入图片描述

解决方法如下

<template>
	<el-table  border :class="{ 'table': '', 'noScrol': tableText }" >
				//通过slot自定义空状态
				<template v-slot:empty >
					<p :class="{'el-table-empty-p':tableText}">{
  
  {tableText}}</p>
				</template>
	</el-table>			
</template>
<script>
	import {ref} from "vue";
	export default {
		setup() {
			const tableText = ref("暂无数据");//这边暂无数据的逻辑自己结合需求设置
			return {
				tableText
			}
		}
	}
</script>
<style scoped>
//强制设置样式隐藏滚动条(这里我是全局设置了,可根据自己需求来)
	.el-table-empty-p {
	display: block;
	widt
<think>我们正在使用ElementUI框架,希望实现一个布局:仅滚动el-main区域的内容。也就是说,header和aside固定,当内容超出时,只在main区域出现滚动条,而不是整个页面滚动。根据引用[3]中的描述,我们可以设置el-main的高度,并设置overflow-y属性来使其产生滚动条。但要注意,浏览器默认的滚动条可能会同时出现,所以需要确保其他部分不产生滚动条。具体步骤:1.布局结构:使用el-container、el-header、el-aside和el-main组件构建布局。2.固定el-header和el-aside:通过设置它们的样式,让它们不随内容滚动。3.设置el-main的高度:使其高度固定(例如使用vh单位),并设置overflow-y:auto(或scroll)来允许内容超出时出现滚动条。4.注意:需要确保el-container的高度正确,避免整个页面出现滚动条。参考引用[3]中的代码片段,他们设置了el-main的高度为93.5vh,并尝试使用overflow-y:scroll。但需要注意的是,如果el-container的高度没有被正确设置,可能会导致整个页面出现滚动条。因此,我们可以这样设置样式:-设置el-container的高度为100vh,这样整个容器会占满屏幕。-设置el-header和el-aside的高度(或使用默认高度),但el-main的高度应该自动填充剩余空间,或者通过计算设置(如calc(100vh-header高度))。引用[3]中提到,他们设置了el-main的高度为93.5vh,这可能是根据header的高度(比如6.5vh)来估算的。但更精确的做法是使用calc计算。另外,引用[4]提到了固定表头的情况,但这里我们不需要固定表头,只需要固定整个header和aside。实现代码示例:模板部分(.vue文件):```html<template><el-containerstyle="height:100vh;"><el-headerstyle="height:60px;background:#b3c0d1;">Header</el-header><el-container><el-asidewidth="200px"style="background:#d3dce6;">Aside</el-aside><el-mainstyle="overflow-y:auto;"><!--这里放置内容,当内容超过el-main的高度时,会出现滚动条--></el-main></el-container></el-container></template>```注意:我们给最外层的el-container设置了高度100vh,这样内部容器可以根据这个高度进行分配。el-header我们设置了固定高度60px,el-aside设置了固定宽度200px。el-main我们设置了overflow-y:auto,这样当内容超出时才会出现滚动条。但是,这样设置后,el-main的高度会自动填充剩余高度吗?实际上,el-container是一个flex布局,所以我们需要设置el-container的排列方式。根据ElementUI的文档,el-container默认是flex布局,并且方向为column(垂直方向)。所以外层el-container是垂直方向,内层el-container(包含aside和main)是水平方向(因为el-container默认在水平方向排列时,会加上一个class是is-vertical,但如果没有设置direction,则内层默认是水平排列)。因此,我们需要让内层el-container(即el-header后面的那个el-container)的高度能够自动填充剩余空间。我们可以设置外层el-container为flex布局,并设置方向为column,然后内层el-container设置flex:1,这样它就会填充剩余高度。修改后的模板:```html<template><el-containerstyle="height:100vh;flex-direction:column;"><el-headerstyle="height:60px;background:#b3c0d1;">Header</el-header><el-containerstyle="flex:1;"><el-asidewidth="200px"style="background:#d3dce6;">Aside</el-aside><el-mainstyle="overflow-y:auto;"><!--内容--></el-main></el-container></el-container></template>```这样,内层el-container会填充header剩下的全部高度,而el-main的高度就是内层el-container的高度,当内容超出时,el-main就会出现滚动条。另外,为了避免整个页面出现滚动条,我们可以在全局样式(如App.vue)中设置:```cssbody{margin:0;}```这样,页面就不会有默认的边距,外层容器100vh就不会超出。总结:1.使用el-container布局,外层容器高度100vh,方向为column。2.el-header固定高度。3.内层el-container设置flex:1,使其填充剩余高度。4.el-aside固定宽度,el-main设置overflow-y:auto,实现内部滚动。这样,当el-main中的内容超出时,滚动条只会在el-main内部出现,不会影响整个页面。注意:如果el-main内部有表格等组件需要固定表头,则可能需要另外处理,但本问题只要求el-main滚动。相关问题:1.如何在ElementUI中实现整个页面的布局(包括header,aside,main)?2.如何让el-main的内容滚动时,固定表头(如el-table)?3.在ElementUI布局中,如何响应式地调整el-aside的宽度?4.如何隐藏el-main滚动条(美化滚动条)?</think>在 Element UI 中实现仅滚动 `el-main` 区域内容的布局效果,可通过以下步骤设置: ### 解决方案 1. **布局结构** 使用 `<el-container>` 嵌套结构: ```html <el-container style="height: 100vh;"> <!-- 外层容器占满视口 --> <el-header height="60px">Header</el-header> <!-- 固定高度 --> <el-container> <el-aside width="200px">Aside</el-aside> <!-- 固定宽度 --> <el-main style="overflow-y: auto;"> <!-- 关键:开启垂直滚动 --> <!-- 内容区域 --> <div style="height: 1500px;">可滚动内容</div> </el-main> </el-container> </el-container> ``` 2. **核心样式设置** - `el-main` 添加 `overflow-y: auto` 开启垂直滚动条 - **外层容器** 必须设置固定高度(如 `height: 100vh`) - **全局样式** 隐藏浏览器默认滚动条: ```css html, body { overflow: hidden; /* 禁用全局滚动 */ margin: 0; /* 去除默认边距 */ } ``` 3. **处理常见问题** - **滚动条位置异常**:确保 `el-main` 的直接父容器有明确高度(通过 `flex:1` 自动填充剩余空间): ```css .el-container > .el-container { flex: 1; /* 填充Header外的剩余高度 */ } ``` - **表格内滚动**:若 `el-main` 内嵌表格需独立滚动,对表格单独设置: ```html <el-table :height="'calc(100vh - 60px)'"> <!-- 根据布局动态计算高度 --> ``` ### 完整示例 ```html <!DOCTYPE html> <html> <head> <style> html, body { overflow: hidden; margin: 0; } .el-header { background: #b3c0d1; line-height: 60px; } .el-aside { background: #d3dce6; } .el-main { background: #e9eef3; } </style> </head> <body> <div id="app"> <el-container style="height: 100vh; flex-direction: column;"> <el-header height="60px">Header</el-header> <el-container style="flex: 1;"> <!-- 关键:flex填充剩余高度 --> <el-aside width="200px">Aside</el-aside> <el-main style="overflow-y: auto;"> <div style="height: 1500px; padding: 20px;"> 仅此区域可滚动(内容超出后出现滚动条) </div> </el-main> </el-container> </el-container> </div> <!-- 引入Element UI --> <script src="//unpkg.com/vue@2"></script> <script src="//unpkg.com/element-ui/lib/index.js"></script> <script> new Vue({ el: '#app' }) </script> </body> </html> ``` ### 关键点说明 1. **外层容器高度** 必须设置 `height: 100vh` 使布局占满视口,这是内部滚动生效的前提[^3]。 2. **flex布局控制** 通过 `style="flex: 1"` 让内层容器自动填充 Header 外的剩余空间,确保 `el-main` 高度正确[^3]。 3. **禁用全局滚动** `html, body { overflow: hidden }` 隐藏浏览器默认滚动条,强制滚动仅发生在 `el-main` 内[^3]。 4. **动态高度计算** 嵌套表格时,用 `calc(100vh - 60px)` 动态计算高度(60px=Header高度)[^4]。 > ⚠️ 注意:若需兼容旧浏览器,可用 JavaScript 动态计算高度(监听窗口 resize 事件更新 `el-main` 高度)。 --- ### 相关问题 1. 如何在 Element UI 中实现 `el-header` 固定吸顶效果? 2. `el-aside` 侧边栏如何实现折叠时的平滑滚动效果? 3. 如何自定义 Element UI 滚动条的样式(如颜色/宽度)? 4. 在移动端如何优化 `el-main` 区域的滚动体验? [^1]: 滚动条位置同步的逻辑分析 [^3]: 通过设置局部容器高度和 overflow 实现独立滚动 [^4]: 动态高度计算在表格滚动中的应用
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值