html 表格 布局 源码,分析elementUI组件中Table表格的布局方式

用浏览器审视下代码发现和

并不在一个

6c8e7b2a6586

image.png

再看下源码下的目录

6c8e7b2a6586

table-body

6c8e7b2a6586

table-header

是的,thead和tbody是分开写的,那为什么这样要分开写呢?分开写后每一列是怎么对齐的?

先看下列是怎么对齐的。

6c8e7b2a6586

image.png

看代码发现使用colgroup属性控制他们有相同宽度的列。name可以不写,按顺序对应th,td。并且table的样式改为table-layout: fixed;border-collapse: separate。

开发中会发现td,th的属性并不好控制,我们在里面多套一层div控制样式。

6c8e7b2a6586

image.png

分开写必然有好多好处,在自己封装表格的时候发现表格的需求功能还是比较多的,而分开扩展功能会更方便扩展,并满足需求,如:固定表头,流体高度。

看antd的页面代码会发现前面简单的表格是没分开的,到固定表头功能时分开了,这样的话,可能写两套的渲染方法了。

分开后当有横向的滚动条时,滚动条是在tbody这一层的,thead要跟着滚动,则需监听滚动条让thead的滚动距离等于tbody的滚动距离。

bodyWrap.addEventListener('scroll', ()=>{

headerWrap.scrollLeft = bodyWrap.scrollLeft

}, false)

表格封装固定列会是个难点之一。

6c8e7b2a6586

image.png

图中代码可以看出,它套了2层的table,再使用设置显示宽度和定位的布局让一个table固定在左边。此时的竖向滚动条是table1的,鼠标在table2的时候不能滚动,监听table2的鼠标滚轮事件,然后把滚动距离赋值给table1,这就是elementUI鼠标在固定列时滚动没有平滑效果的原因吧。这里可以参考antd的布局,让父的宽度小于tbody的滚动条宽度,在父级overflow: hidden;就把滚动条遮掉了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值