如何解决自适应表格内容过多将布局支撑乱了的情况
给 table 标签加上如下 css 声明,table-layout 作用就是让表格布局固定,使得表格的宽度不会根据内容多少而动态变化
td 不用设置 height
单元格内容太多,会出现内容折行限制,将 td 撑篙,所有设置 height 没有意义
如何设置初始高度
设置 td 初始高度最好用 padding 进行设置,考虑到了单元格被撑开的情况
表格边框问题
给 th td 都设置 border 后会出现如下情形
如何让表格的边框重叠
border-collapse 可以让单元格的之间共享边框
border-spacing 消除单元格之间的间距
如何使用伪元素实现表格流式布局
伪元素 :before 和 :after 它们有一个功能是将元素属性值显示到HTML内容里,content: attr(data-label),放在before/after伪元素类里。我们就能够让table在PC端表现成网格效果,而在小屏的手机端表现成流式布局
我们以600px为小屏幕大屏幕的分界点,下面的CSS使用媒体查询语句,在小于600px宽的屏幕上,用CSS将td上的属性值取出来,放到内容区显示
拖拽问题
第一种解决方案 原生 table + 原生拖拽第二种解决方案 原生 table + sortablejs
第一种解决的问题
如果只使用 element-ui 的 el-table 貌似表格一行的数据无法拿到所以只能使用原生table 布局,结合原生 拖拽就可以拿到一行的数据了
原生拖拽总结 html5 drag drop
dragstart 开始拖拽,参数 event 事件对象 指向拖拽的项drag 拖拽过程中,参数 event 事件对象指向拖拽的项dragend 拖拽结束,参数 event 事件对象指向拖拽的项dragenter 当拖拽源进入拖拽放置的位置时触发dragleave 当拖拽源离开拖拽放置的位置时触发dragover 当拖拽源在拖拽放置位置移动时触发drop 当拖拽源在拖拽位置放置时触发
e.dataTransfer对象
1. set(key, value) 通常结合 dragstart 方法一起使用,把需要使用到数据放置到 e.dataTransfer 对象中
2. get(key) 通常结合 drop 方法一起使用,把需要用到的数据从 e.dataTransfer 对象中取出来
第一种需求,包含 checkbox 的表格拖拽
问题1 这个地方涉及到 thead, tbody 分开布局问题,tbody中的 checkbox 与右侧数据也是分开布局问题,这里可以解决全选问题,如果直接与右侧数据一起循环渲染出来的话,会导致全选问题很难处理,这里的解决方案是使用 el-checkbox-group, el-checkbox 来实现全选,保证可以获取到数据
Checkbox 选中高亮问题,当我点击每一行的checkbox 时,会给每一行加上高亮,当我点击表头的checkbox 时,全部选中,tbody 中的数据全部高亮
数据行拖拽高亮问题,这里我一开始是使用 html5 中 classList.add() 和 classList.remove() 类名,但是发现当给 el-checkbox 的添加背景色类名时,没有效果,发现是渲染出来的 label 标签的类名只有 .el-checkbox 获取 .el-checkbox.is-checked ,其他自动会被删除掉了,所以有一种统一的方式就是给 table-data 数据初始化的时候加上一个 标志 isSetBgColor 属性来标志是否给数据加上背景色
第二种需求,两个表格只从一边拖到另一边
由于如果使用 element-ui 结合 sortablejs 的话,拖拽只能拿到 dom,拿不到数据,所以只能使用原生 table 让后将每一行的数据使用 data-属性隐藏起来,然后拖拽到左边的话,可以拿到当前拖拽项的 dom 元素 再从 dom 元素中 dataset 对象取出数据
同时给拖拽过来的那项设置不能拖拽 filter 属性禁止在此拖拽,然后左边删除时候解除禁止拖拽
第三种需求 两个表格互相拖拽
跟上面的需求,操作步骤类似
组件中需要使用到的 utils.js 类似像 el-check-group el-checkbox, 和 el-form el-form-item 像这种,需要将子组件的事件委托分发给父级组件,作为组件的mixin 混进组件中
如果您觉得本文的内容对您的学习有所帮助:
关键字:
jquery