我有一个页面,上面有一系列的部分。每个部分有一个小图像。当单击图像时,我想显示一个自定义控件。显示控件很简单,将z-index设置得更高一些,以确保控件在所有元素的顶部。
但是用户仍然可以与控件后面的部分进行交互。
为了阻止这种情况,我添加了一个“遮罩层”。基本上是一个div,大小与文档相同,具有以下CSS(使用jQuery语法)-
{
position: 'absolute',
top: 0,
left: 0,
width: '100%',
height: $(document).height(),
display: 'none',
zIndex: 1,
backgroundColor: '#FF0000'
};
为了测试,我把背景色设成了红色。将透明度设置为0.1(轻模糊)。然后我将自定义控件的z-index设置为2,以便它位于遮罩层之上。
这在Firefox、Chrome和Safari中完美运行,但在IE中不行。
自定义控件不是遮罩层的子元素。
目标是使以下文档被遮罩层覆盖,并使控件位于遮罩层之上以与之交互。这是我在所有浏览器上都能得到的结果,除了IE。在IE中,情况是文档和控件都被遮罩层覆盖。
答案
scunliffe 最接近答案(回答在我无法链接的评论中)。自定义控件在一个相对定位的 div 中(实际上是几个 div 下面)。遮罩层仅仅是添加到 body 的末尾。因此,它位于相对定位的div外部并启动了它自己的z-index堆栈(如 这里 所述)。由于IE 6/7在这方面有问题,无论我将z-index设置为什么,它都会始终低于遮罩层。
所以我把遮罩层移到了相对定位的div中的第一个子元素。这还没有完全解决,因为如果你滚动(我不能用这个解决方案来停止滚动),遮罩层 div 只有可见内容的高度。现在我必须找出如何获取内容的完整高度(可见和不可见)。