8

我的问题与这个问题有关:

使用 CSS 在父元素上方显示子元素

该问题的答案 setoverflow: 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 做些什么吗?

4

1 回答 1

14

position: relative为一个元素创建一个新的定位上下文。此元素的子元素位于此本地上下文中。他们不能离开这个背景。如果要将子元素定位在其父元素的兄弟元素之上,则应将z-index其父元素的值设置为高于z-index其兄弟元素的值。

如果元素相对于其兄弟元素的有效z-index位置仅取决于它们的 DOM 树顺序,那么将元素移动到DOM 树中所有兄弟元素之后的位置(如果语义上合适)也会有所帮助。

请注意,您始终z-index可以通过 JavaScript 进行动态更改(就 Unobtrusive JS 而言,不要忘记提供合理的纯 CSS 替代方案,以便在禁用 JS 时不会隐藏内容)。

于 2012-06-24T22:29:19.693 回答