CSS位置:粘性和溢出

Mor*_*eus 8 css css-position css3

无法找到解决方案.基本上,我想要实现的是position: sticky如果有更多内容然后浏览器高度,则有一个带滚动条的元素.

我不想使用,position: fixed因为它会增加颈部的额外疼痛.

以下是我希望它如何工作的示例:

.placeholder {
  height: 200vh;
  width: 50%;
  float: right;
}

.child {
  position: fixed;
  top: 0;
  bottom: 0;
  height: 100%;
  overflow-y: auto;
}
Run Code Online (Sandbox Code Playgroud)
<div class="parent">
  <div class="placeholder"></div>
  <div class="child">
    some long text
    <br /> some long text
    <br /> some long text
    <br /> some long text
    <br /> some long text
    <br /> some long text
    <br /> some long text
    <br /> some long text
    <br /> some long text
    <br /> some long text
    <br /> some long text
    <br /> some long text
    <br /> some long text
    <br /> some long text
    <br /> some long text
    <br /> some long text
    <br /> some long text
    <br /> some long text
    <br /> some long text
    <br /> some long text
    <br /> some long text
    <br /> some long text
    <br /> some long text
    <br /> some long text
    <br /> some long text
    <br /> some long text
    <br /> some long text
    <br /> some long text
    <br /> some long text
    <br /> some long text
    <br /> some long text
    <br /> some long text
    <br /> some long text
    <br /> some long text
    <br />

  </div>
</div>
Run Code Online (Sandbox Code Playgroud)

小提琴1

这里是例如与position: stickyoverflow没有做任何事情:

.placeholder {
  height: 200vh;
  width: 50%;
  float: right;
}

.child {
  position: sticky;
  top: 0;
  bottom: 0;
  height: 100%;
  overflow-y: auto;
}
Run Code Online (Sandbox Code Playgroud)
<div class="parent">
  <div class="placeholder"></div>
  <div class="child">
    some long text <br />
  some long text <br />
  some long text <br />
  some long text <br />
  some long text <br />
  some long text <br />
  some long text <br />
  some long text <br />
  some long text <br />
  some long text <br />
  some long text <br />
  some long text <br />
  some long text <br />
  some long text <br />
  some long text <br />
  some long text <br />
  some long text <br />
  some long text <br />
  some long text <br />
  some long text <br />
  some long text <br />
  some long text <br />
  some long text <br />
  some long text <br />
  some long text <br />
  some long text <br />
  some long text <br />
  some long text <br />
  some long text <br />
  some long text <br />
  some long text <br />
  some long text <br />
  some long text <br />
  some long text <br />
  
  </div>  
</div>
Run Code Online (Sandbox Code Playgroud)

小提琴2

任何解释/解决方案赞赏.

确保在测试时使用Firefox

Rya*_*ale 14

重要的是要理解sticky元素首先被视为relative元素然后fixed元素(参见MDN).因此,您必须首先将其视为相对元素.如果给相对元素赋予100%的高度,那么除非其父元素具有已定义的高度,否则不会发生任何事情.

如果您希望粘性元素也具有滚动条,则必须为其指定有意义的高度.我建议使用视口高度:

.child {
  position: sticky;
  top: 0;
  bottom: 0;
  height: 50vh;
  overflow-y: auto;
}
Run Code Online (Sandbox Code Playgroud)

对于记录 - fixed在滚动期间元素变为"FF"或Safari中,"粘性"似乎没有按预期工作.我并不关心自己 - 只关注溢出问题.

  • 你的回答帮助了我 thx。在我的例子中,我使用了 `max-height: calc(100vh - 80px)` 因为我把它粘在距离顶部 80px 的元素上。它还允许我在右侧滚动较长的内容,并将列表保持在左侧。 (4认同)
  • 对我来说,位置 stikcy 似乎无法与 Overflow:auto 结合使用 (3认同)
  • 三天。我已经为此奋斗了三天。谢谢。 (3认同)