【问题标题】:Fixed position sidebar that stops at the footer在页脚处停止的固定位置侧边栏
【发布时间】:2014-06-27 08:09:01
【问题描述】:

这个问题我已经看过几次了,但还没有找到一个好的答案,所以我想我会再问一次。

我有一个固定位置在文档顶部的侧边栏,这会使元素脱离正常的 html 流。

当我们滚动到我的页脚所在的底部时,我希望边栏与页脚一起向上推。

HTML

<div id="content">
  <div id="sidebar">
    <ul>
      <li>link</li>
      <li>link</li>
      <li>link</li>
    </ul>
  </div>
</div>
<div id="footer">
  <p>content of unspecified height</p>
  <p>content of unspecified height</p>
  <p>content of unspecified height</p>
  <p>content of unspecified height</p>
</div>

CSS

#content {
  width: 800px;
  margin: 0 auto;
  position: relative;
}

#sidebar {
  padding: 10px;
  position: fixed;
  top: 0;
}

#footer {
  padding: 10px;
}

JS

...?

我想需要发生的是当“内容” div 的底部滚动到屏幕上时,JS 会将侧边栏位置切换为绝对或相对于该 div 的底部,所以它可以回到正常流程..但我愿意接受最佳方法的建议。

编辑:哦,是的,当页面向上滚动时,侧边栏需要回到固定的顶部位置——以防它不明显:)

对 JS 和 JQuery 还是很陌生,这也是一些现有答案对我来说不太合适的另一个原因。

感谢您的任何意见!如果我需要澄清或更正任何事情,请告诉我。

【问题讨论】:

    标签: jquery html css


    【解决方案1】:

    您可能需要一个$(window).on('scroll') 函数来比较页脚的顶部和窗口的底部。伪代码:

    //Make the height of side nav shrink as we scroll past the footer
    var intPos = TopOfFooter - BottomOfWindow
    If (intPos < 0) {
       var newHeight = $(window).height() + intPos // intPos is negative so will take away
       $('#sidebar').height(newHeight);
    } else {
       $('#sidebar').height('100%');
    }
    

    或者类似的东西......

    编辑

    仅供参考:

    var TopOfFooter = $('#footer').offset().top;
    var BottomOfWindow = $(window).scrollTop() + $(window).height();
    

    【讨论】:

    • 该代码似乎可以工作,但与其缩小侧边栏的高度,不如将新类切换到具有更新定位的元素更有意义?既然我没有在我的容器元素上使用任何指定的高度,那么 100% 的高度将不起作用?
    • 当然可以,只需相应更改即可。降低高度正是我会做的。 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-12-08
    • 1970-01-01
    • 1970-01-01
    • 2016-06-09
    • 2021-05-26
    • 1970-01-01
    • 2023-03-16
    相关资源
    最近更新 更多