Oh No,元素被盖住了!!!

161 阅读1分钟

背景:antd(4.x)Table组件需要添加表头调整列宽功能

官方方案:react-resizable

在3.x有,4.x没有了。因为columns下的onHeaderCell方法中少了onResize方法

社区方案:star较多的use-antd-resizable-header

没问题,就用它了✅,但是有个小问题,来,看图:

问题:元素被盖住了

image.png

这是鼠标划上显示的效果,很明显吧,左边是column加了fixed属性的效果,明显左边比右边要窄一点,找了半天的原因,发现就是元素被盖住了

原因分析

要么是overflow: hidden,要么是z-index的问题,参考文档:blog.csdn.net/zqd_java/ar…

但是调了半天,发现都不行。

再进一步分析,只有column加了fixed属性的才会这样,加了fixed属性的都会加一个class是.ant-table-cell-fix-left,只要把这玩意去掉也就没问题了,所以就是这个带来的属性搞的鬼。但是任凭我调z-index以及overflow都不好使

image.png

猜想,是不是同级元素设置了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>

效果:

  1. 元素设置了position: absolute; z-index: 1; 子元素设置positoin: absolute; z-index: 2; 结果:盖住了

image.png

  1. 元素设置了position: absolute; z-index: unset; 子元素设置positoin: absolute; z-index: 2; 结果:不会被盖住了

image.png

  1. 复制antd table的场景,人家是元素设置了position: sticky; z-index: 1; 子元素设置positoin: absolute; z-index: 2; 结果:盖住了

image.png

所以,这个问题无解了吗 0.0