我的问题与这个问题有关:
Show child element above parent element using CSS
设置overflow: visible
的问题的答案仅适用于一个孩子的一个父母。但是,我有这些元素的行;父母的行,我需要孩子在父母身上显示。我可以让孩子显示原来的父母,但我不能让孩子显示父母的兄弟姐妹。为了让您了解我在说什么,这是一个截图:
我想要的是选项弹出窗口,隐藏在接下来的两行后面的元素,显示在这两行上,就像它显示在其直接父级上一样。我一直在搞乱它并且没有想出来,所以希望有人能够提供帮助。
这是基本结构:
.row,
.selector {
position: relative;
}
.label,
.selector {
display: inline-block;
}
.selector {
overflow: visible;
}
.selector-inner {
display: block;
}
.selector-arrow {
float: right;
width: 21px;
height: 21px;
background: url(arrow.png) no-repeat center center;
}
.selector-caption {
display: inline-block;
}
.options-popup {
position: absolute;
z-index: 100;
top: 0px;
right: 0px;
}
.options-item {
/* only for fonts and sizes */
}
<div class="row">
<div class="label">Color Scheme:</div>
<div class="selector">
<div class="selector-inner">
<div class="selector-arrow"></div>
<div class="selector-caption">Standard</div>
</div>
<div class="options-popup">
<div class="options-item">Standard</div>
<div class="options-item">Dark</div>
<div class="options-item">Light</div>
</div>
</div>
</div>
我可以对CSS做什么让选项弹出窗口显示在所有其他元素上?我需要对HTML做些什么吗?
答案 0 :(得分:10)
position: relative
创建一个新的定位上下文。此元素的子元素位于此本地上下文中。他们不能离开这种背景。如果要将子元素放在其父元素的兄弟元素之上,则应将其父元素的z-index
设置为高于其兄弟元素的z-index
的值。
如果元素相对于其兄弟姐妹的有效z-index
位置完全取决于它们的DOM树顺序,那么在 DOM树中的所有兄弟姐妹之后将元素移动到位置(如果在语义上合适)也可以帮助。
请注意,您始终可以通过JavaScript动态更改z-index
(就Unobtrusive JS而言,不要忘记提供合理的纯CSS替代方案,以便在禁用JS时不隐藏内容)