绝对定位元素滚动内容,为什么?

时间:2016-04-25 15:04:15

标签: html css

我有following setup:(尝试滚动内容)

HTML

<div class="wrapper">
  <div class="backdrop"></div>
  <div class="content">
    1<br>
    2<br>
    3<br>
    4<br>
    5<br>
    6<br>
    7<br>
  </div>
</div>

CSS:

.wrapper {
  height: 100px;
  overflow: auto;
  border: 1px solid black;
  position: relative;
}

.backdrop {
  position: absolute;
  top:0;
  left: 0;
  bottom:0;
  right: 0;
  background: red;
}

问题在于背景由于某种原因在内容中滚动顶部。为什么会这样?我期待背景保持静止,因为它相对于包装边框定位,而不是内容。

1 个答案:

答案 0 :(得分:3)

可滚动区域由包装器通过其 A B C D 1: 0 0 0 0 2: 1 0 0 0 3: 0 0 0 0 声明定义。由于包装器用作内容和背景的包含块(由于overflow: auto),因此这会导致两个元素一起滚动。换句话说,这是由于两个 position: relativeoverflow: auto在同一个父元素上,串联工作。

请注意,绝对定位不会使元素免于滚动;当一个absposed元素看起来不会滚动时,这只是因为它的包含块不会滚动,而且与absposed元素滚动的是其包含块的其他元素。在您的设置中不是这种情况。有关此问题的另一个示例,请参阅section 11.1.1 of the spec中的最后一个示例。