当前位置: 首页 > news >正文

解决Grid布局下el-table自适应缩小失败的问题

1.遇到的问题:

使用了ElementPlus的el-table组件,同时将该组件用在了grid布局下。

拖动浏览器窗口,视口宽度变大时,el-table的宽度会跟着一起变大,但视口缩小时,表格不会跟着一起缩小,而是固定了当前的宽度,导致内容溢出。

2.现象:

1.原始状态:红色区域200px,蓝色区域minmax(auto, 1fr),绿色区域300px;

2.浏览器视口宽度变大:表格会跟着一起变大

3.浏览器视口宽度缩小:表格宽度固定,内容溢出

3.原始代码
<template><div class="wrap"><div class="bg-red-500">1</div><div class="bg-blue-500"><div><el-table :data="data"><el-table-column label="日期1" prop="date"></el-table-column><el-table-column label="日期2" prop="date"></el-table-column><el-table-column label="日期3" prop="date"></el-table-column><el-table-column label="日期4" prop="date"></el-table-column></el-table></div></div><div class="bg-green-500">3</div></div>
</template><script lang="ts" setup>
import { ref } from 'vue'const data = ref([{ date: '2016-05-02' },{ date: '2016-05-04' },{ date: '2016-05-01' },{ date: '2016-05-03' }, 
])</script><style lang="less" scoped>
.wrap {width: 100%;height: 100%;display: grid;grid-template-columns: 200px minmax(auto, 1fr) 300px;}
</style>
4.问题出在哪里?

关键就在于中间列的minmax(auto, 1fr),以及el-table对于自身最小宽度的计算,产生了影响。

当视口放大时,el-table重新计算最小宽度,此时最小内容宽度不断变大。

当我们开始缩小视口宽度时,grid列的最小宽度是由auto计算出来的,而auto默认等于子元素的最小内容宽度,所以列宽就不能比表格最小内容宽度更小。

所以中间列的宽度才无法变小。

5.解决方案

直接给中间那一列指定最小宽度min-width: 0;

表示“我允许grid的这一列,在必要的时候变得比内容还小”,此时grid的自动计算逻辑就会被打破!中间那一列的表格el-table,就可以随着父容器正常变化了!

.wrap {width: 100%;height: 100%;display: grid;grid-template-columns: 200px minmax(auto, 1fr) 300px;.table-col {min-width: 0;}
}

我看到有其他文章说可以给父元素设置position:relative;,子元素设置position:absolute;。同样可以解决问题,但这样设置很显然会影响子元素的布局。它能实现是因为子元素脱离了文档流,已经不再归属于grid的管辖范围了,所以我是不太建议这么解决的。

另外补充一下,中间那一列,我们很可能也会再次定义grid布局,比如

在row方向定义三行:代码如下

<template><div class="wrap"><div class="bg-red-500">1</div><div class="table-col bg-blue-500"><div><el-table :data="data"><el-table-column label="日期1" prop="date"></el-table-column><el-table-column label="日期2" prop="date"></el-table-column><el-table-column label="日期3" prop="date"></el-table-column><el-table-column label="日期4" prop="date"></el-table-column></el-table></div><div class="bg-[#000]">123456</div><div class="bg-[#000]">7890</div></div><div class="bg-green-500">3</div></div>
</template><script lang="ts" setup>
import { ref } from 'vue'const data = ref([{ date: '2016-05-02' },{ date: '2016-05-04' },{ date: '2016-05-01' },{ date: '2016-05-03' }, 
])</script><style lang="less" scoped>
.wrap {width: 100%;height: 100%;display: grid;grid-template-columns: 200px minmax(auto, 1fr) 300px;.table-col {min-width: 0;display: grid;grid-template-rows: 300px 200px 200px;gap: 8px;}
}
</style>

el-table,加了一层div,此时表格也会溢出的

这是因为min-width不是定义在表格的父元素了。

这个时候要改的就是给el-table的父元素再加一个min-width: 0;即可解决问题!

.wrap {width: 100%;height: 100%;display: grid;grid-template-columns: 200px minmax(auto, 1fr) 300px;.table-col {min-width: 0;display: grid;grid-template-rows: 300px 200px 200px;gap: 8px;.table-col-1 {min-width: 0;}}
}

http://www.dtcms.com/a/566605.html

相关文章:

  • 企业做网站应该注意的问题北京排名seo
  • 基础展示营销型型网站网站建设中 英语
  • Javascript运算符之一元运算符
  • 留言板网站模板editplus建设网站教学
  • 网站设计公司域名服务器建设wordpress4.5.3
  • 《投资-150》股市不同的操作类型、对于的操作手法、盈利方式、对个股的影响
  • 三轴云台之闭环控制技术
  • 做企业宣传网站dw建设网站的代码模板下载
  • 【EmberTrace AI】多智能体协作平台产品研发进度……
  • 河南建设监理协会网站电话朋友圈推广怎么收费
  • 东莞专业拍摄做网站照片重庆旅游攻略详细安排
  • 从 OpenSearch 到 Apache Doris:领创集团日志系统升级实践,降本 45%
  • InvSR:Arbitrary-steps Image Super-resolution via Diffusion Inversion
  • 广东省省考备考(第一百四十天11.3)——数量关系、资料分析(强化训练)
  • 网站性能优化三明网站开发
  • 【动态规划:01背包】01背包详解 模板题 优化
  • 专门做餐饮空间设计的网站ui设计常用软件
  • 企业信息公示平台徐州seo
  • 雕塑网站模板电商网站设计的流程
  • RAE:Diffusion Transformers with Representation Autoencoders
  • 医院网站开发多少钱烟台网络公司员工人数
  • 算法学习记录11——Python 多变量赋值问题
  • 怎样拥有自己的网站外行学习个人网站建设
  • 建设部城市管理监督局网站官网建站系统源代码
  • html网站地图模板房地产型网站建设
  • 基于YOLOv10的水质污染检测:水面漂浮油污与垃圾智能识别实战
  • 大唐网站建设全国文明城市创建方案
  • 奉贤集团网站建设军队房地产与建设工程法律实务在哪个网站可以购买
  • 上海做网站培训班成都室内设计公司排名前十
  • 建设网站公司是什么淘宝网站的推广方案