html - 剩余零的嵌套粘性元素不粘性

标签 html css sticky

为什么我的 left: 0 嵌套粘性元素不粘附,而 top: 0 嵌套元素正常粘附?

.scroll {
  width: 200px;
  height: 200px;
  border: 1px solid;
  overflow: auto;
}

.container {
  width: 600px;
  height: 1000px;
}

.sticky-left {
  position: sticky;
  left: 0;
}

.sticky-top {
  position: sticky;
  top: 0;
}
<div class="scroll">
  <div class="sticky-top">sticky-top</div>
  <div class="sticky-left">sticky-left</div>
  <div class="container">
    <div class="sticky-top">sticky-top-nested</div>
    <div class="sticky-left">sticky-left-nested</div>
  </div>
</div>

最佳答案

让我们添加一些边框,我们将清楚地看到发生了什么:

.scroll {
  width: 200px;
  height: 200px;
  border: 1px solid;
  overflow: auto;
}
.scroll > div {
  border:2px solid green;
}

.container {
  width: 600px;
  height: 1000px;
  border:2px solid red!important;
}
.container > div {
  border:2px solid green;
}

.sticky-left {
  position: sticky;
  left: 0;
}

.sticky-top {
  position: sticky;
  top: 0;
}
<div class="scroll">
  <div class="sticky-top">sticky-top</div>
  <div class="sticky-left">sticky-left</div>
  <div class="container">
    <div class="sticky-top">sticky-top-nested</div>
    <div class="sticky-left">sticky-left-nested</div>
  </div>
</div>

如您所见,嵌套的粘性元素的宽度都等于父元素的宽度(因为它们是 block 元素),因此左粘性元素没有任何粘性行为的空间1 因为它的 width:100% 与顶部的不同,它仍然可以粘住,因为它的高度小于父级高度。

对于非嵌套元素我觉得很清楚。


使元素inline-block 或减小宽度,您将有一个粘性行为:

.scroll {
  width: 200px;
  height: 200px;
  border: 1px solid;
  overflow: auto;
}
.scroll > div {
  border:2px solid green;
}

.container {
  width: 600px;
  height: 1000px;
  border:2px solid red!important;
}
.container > div {
  border:2px solid green;
  width:150px;
}

.sticky-left {
  position: sticky;
  left: 0;
}

.sticky-top {
  position: sticky;
  top: 0;
}
<div class="scroll">
  <div class="sticky-top">sticky-top</div>
  <div class="sticky-left">sticky-left</div>
  <div class="container">
    <div class="sticky-top">sticky-top-nested</div>
    <div class="sticky-left">sticky-left-nested</div>
  </div>
</div>


1 A stickily positioned element is an element whose computed position value is sticky. It's treated as relatively positioned until its containing block crosses a specified threshold (such as setting top to value other than auto) within its flow root (or the container it scrolls within), at which point it is treated as "stuck" until meeting the opposite edge of its containing block.ref

在你的情况下,你总是遇到相反的边缘。

关于html - 剩余零的嵌套粘性元素不粘性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54934650/

相关文章:

javascript - 如何正确地将选择标签放入表格单元格

javascript - 快速悬停时 jQuery animate() 序列乱序

javascript - 如何防止粘性 header 以小分辨率运行

css - 粘性页脚不适用于所有页面

html - -webkit-transition 在 HTML4 transitional 中工作正常但在 HTML5 中不行?

html 标签 radio 适用于桌面和模拟器,但不适用于 iOS Safari

javascript - 当 block 在视口(viewport)上加载时显示加载(占位符)图像

javascript - 在上面的目录中找不到bower_components

jquery - 置顶消息如何在 10 秒后自动关闭

javascript - 退出 ui-router 中的粘滞状态