不错的设计。
好的,所以我首先要说的是,正如其他人已经建议的那样,我相信解决分层问题的方法是将该框移到其父级(地图)之外。
但是你设置了一些限制,所以我会尽量少打破。我不知道如何在不破坏任何约束的情况下做到这一点。Z-index 是继承的(同样,其他人已经指出了这一点),所以你不能只用那个工具突破你父母的层。
因此,这是使用 javascript 获得相同效果的一种方法。它很丑陋,以后可能会让你更头疼,但它至少应该有效:
- 找出要放在顶部的 div 的绝对位置。
- 复制一份。
- 隐藏原件(如果不透明,则可选)。
- 将副本插入到所有内容之上。
如果您使用的是 jQuery,则可以使用该.offset()
函数获取元素相对于文档的位置。之后就很简单了:
$(document).ready( function() {
$("a[href='#overlay']").click( function() {
// 1: get the position
pos = $('.wrap').offset();
// 2: make a copy
halecopy = $('.bottom .wrap').clone();
// 3: hide the original
$('.bottom .wrap').css({opacity: 0});
// 4: Insert new label on top of everything
$('body').prepend(halecopy);
// position the new label correctly
halecopy.css({position:'absolute',
top: pos.top,
left: pos.left,
'z-index': 2});
// show the "top" layer
$('.top').fadeIn();
});
$("a[href='#hide']").click( function() {
$('.top').fadeOut( function() {
// remove the label copy
halecopy.remove();
// show the original again
$('.bottom .wrap').css({opacity: 1});
});
});
});
该脚本适用于这个标记:
<div class="top">
<div class="label">
<p>Whatever</p>
</div>
</div>
<div class="bottom">
<div class="wrap">
<div class="label">
<p>Haaaleluuuuia!</p>
</div>
</div>
</div>
<a href="#overlay">show</a>
<a href="#hide">hide</a>
使用这些样式:
.top,
.bottom {
position: absolute;
top: 10%;
left: 3%;
}
.top {
z-index: 1;
padding: 2%;
background: rgba(0, 127, 127, 0.8);
display:none;
}
.bottom {
z-index: -1;
padding: 3%;
background: rgba(127, 127, 0, 0.8);
}
.label {
color: #fff;
}
.wrap {
outline: 1px dashed rgba(127, 0, 0, 0.8);
background: rgba(127, 127, 127, 0.8);
}
.bottom .label {
z-index: 10;
}
这是一个方便的jsfiddle 演示。