背景:antd(4.x)Table组件需要添加表头调整列宽功能
官方方案:react-resizable
在3.x有,4.x没有了。因为columns下的onHeaderCell方法中少了onResize方法
社区方案:star较多的use-antd-resizable-header
没问题,就用它了✅,但是有个小问题,来,看图:
问题:元素被盖住了
这是鼠标划上显示的效果,很明显吧,左边是column加了fixed属性的效果,明显左边比右边要窄一点,找了半天的原因,发现就是元素被盖住了
原因分析
要么是overflow: hidden,要么是z-index的问题,参考文档:blog.csdn.net/zqd_java/ar…
但是调了半天,发现都不行。
再进一步分析,只有column加了fixed属性的才会这样,加了fixed属性的都会加一个class是.ant-table-cell-fix-left,只要把这玩意去掉也就没问题了,所以就是这个带来的属性搞的鬼。但是任凭我调z-index以及overflow都不好使
猜想,是不是同级元素设置了position以及z-index,他们的子元素就是会被覆盖?
搞个demo自测一把:
代码:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
.absolute {
position: absolute;
width: 20px;
height: 20px;
background-color: aquamarine;
top: 0;
border: 1px solid #ccc;
z-index: 1;
}
.bar {
position: absolute;
width: 10px;
height: 10px;
right: -5px;
top: 0;
background-color: blueviolet;
z-index: 2;
}
</style>
</head>
<body>
<div class="absolute" style="left: 0;">
<div class="bar"></div>
</div>
<div class="absolute" style="left: 20px;">
<div class="bar"></div>
</div>
</body>
</html>
效果:
- 元素设置了position: absolute; z-index: 1; 子元素设置positoin: absolute; z-index: 2; 结果:盖住了
- 元素设置了position: absolute; z-index: unset; 子元素设置positoin: absolute; z-index: 2; 结果:不会被盖住了
- 复制antd table的场景,人家是元素设置了position: sticky; z-index: 1; 子元素设置positoin: absolute; z-index: 2; 结果:盖住了
所以,这个问题无解了吗 0.0