jquery - 可滚动容器内的粘性 header

标签 jquery html css sticky

关于 DOM 中的粘性元素以及处理它的各种库存在很多问题,例如:

jquery.pin、sticky-kit 等等

但所有这些的问题是它们仅适用于滚动的整个主体,并且限制父容器必须具有默认的溢出设置。

enter image description here

Sticky-kit的示例页面完美地展示了我所需要的。只是就他们的情况而言,他们实际上使用了iframe。在我的应用程序中,它是一个具有 overflow: auto 的 Div(它是一个具有 Flexbox 布局的应用程序,具有固定的页眉、页脚和左侧菜单,而主要内容则滚动)。

因此,当我滚动灰色框时,我希望红色框“粘住我”保留在那里。绿色元素没有滚动并且永远不会移动。我的要求:

  • 正文不滚动
  • 没有 iframe
  • 我不希望每 50 毫秒运行一次超时

到目前为止我可以看到几种解决方案:

  • 位置:固定在红色框上,a)复制其内容(不是选项)b)动态调整灰色容器的边距/填充,以强制元素保持在红色框下方(完美,但盒子可能会膨胀,并且不容易监控其高度并重新调整边距)。像这样,但标题高度可能会改变:http://jsfiddle.net/KTgrS/

  • 位置:红色框上的绝对位置,并在灰色框的滚动事件上重新调整它。可能,但滚动不提供滚动“增量”,并且获取它有点粗略。

还有其他想法或方法可以使上述想法或方法适用于实际生产使用吗?对最新浏览器的支持就足够了。

最佳答案

正确答案

要轻松完成此操作:

$('.greybox').on('scroll',function(event){
  $('.redbox').css({top: $(this).scrollTop()});
});

原始答案:

将红色和灰色放在同一级别的容器中会更容易。

<div class="container">
  <div class="redbox"></div>
  <div class="greybox"></div>
</div>

样式:

.container
{
  position: relative;
  width: ...px;
  height: ...px;
}
.redbox
{
  position: absolute;
  top: 0px;
  height: 20px;
  left: 0px;
  right: 0px;
  background: red;
  z-index: 1;
}
.greybox
{
  position: absolute;
  top: 0px;
  left: 0px;
  width: 100%;
  height: 100%;
  overflow: auto;
  padding-top:  20px; // height of the redbox
  box-sizing: border-box;
  z-index: 0;
}

现在 redbox 看起来像是粘性的,但你根本不需要任何 JS 或粘性的东西:-)

关于jquery - 可滚动容器内的粘性 header ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35224170/

相关文章:

python - 将 CSS 元素添加到 Django 菜单

css - 如何强制表单菜单与其他超链接保持在同一行

javascript - 我将如何使用 jquery 选择此 div 中的第一张图片?

jQuery:防止添加 ('click' ) 两次

javascript - 为 JavaScript 中的全局变量列表赋值

html - 如何调整图像大小但保留 HTML 中的外观?

javascript - 边框底部动画与 jquery

javascript - 从内联javascript获取e参数

html - 内嵌 div 元素

jquery - IE7 中的 jQuery Lights 问题