【问题标题】:How to keep a fixed element away a specific distance from the document bottom?如何使固定元素与文档底部保持特定距离?
【发布时间】:2013-04-21 09:03:27
【问题描述】:

我有一个位置:固定,底部:0px 的元素。 当我向下滚动页面时,这个元素应该跟随我直到它更接近页脚,比如说 100px 高度,我试图让元素保持在底部:0px 直到它到达页脚元素,在那一刻它应该始终让页脚元素位于其下方。

这是我的 CSS:

#backToTop{
    width:80px;
    height:50px;
    background:#333;
    color:#FFF;
    text-align:center;
    border-radius:10px 10px 0 0;
    padding-top:10px;
    position:fixed;
    bottom:0;
    left:50%;
    margin-left:550px;
}

我查看了 Jquery 的 $(document).height()$(window).scrollTop() 以尝试提出某种条件来检测元素的位置何时接近页脚,但没有成功(我的页脚的高度是120):

$(window).scroll(function(){    
if($(document).height()-($(window).scrollTop()+$(window).height()) <= 120){
    $('#backToTop').css({'bottom':$(document).height()-($(window).scrollTop()+$(window).height())});
}else{
    $('#backToTop').css('bottom',0);
}
});

我不太确定这些值到底指向哪里,有什么提示吗?谢谢。

【问题讨论】:

  • 你能用你的html和all做一个jsfiddle例子吗
  • 请用jsfiddle写你的例子或者写你有问题的html代码...!
  • 在这里,谢谢:jsfiddle.net/6bZab,我让它工作了,现在的问题是元素在到达页脚时神秘地向右移动。
  • 对不起各位,错误的链接,这个是好的:jsfiddle.net/mscxp/AFDkC 第一次打开它并滚动它会向右移动

标签: jquery css position fixed


【解决方案1】:

尝试为#backToTop 元素创建两个类,一个用于固定位置,另一个用于相对位置。当页脚到达视口时,#backToTop 元素将其类更改为“相对”。

HTML:

<div id="container">
    <div id="backToTop" class="fixed_pos">Top</div>
    <footer>footer</footer>
</div>

CSS:

#container {
width: 100%;
height: 1000px;
float: left;
}

#backToTop {
width:80px;
height:50px;
background:#333;
color:#FFF;
text-align:center;
border-radius:10px 10px 0 0;
padding-top:10px;    
left: 50%;
margin-left: -40px;
}

.fixed_pos {
position:fixed;
bottom:0;    
}

.relative_pos {
position: relative;
top: 100%;
}

footer {
width: 100%;
height: 200px;
float: left;
position: relative;
top: 100%;
background: #333;
color: #fff;
text-align: center;
}

看看这里:

http://jsfiddle.net/6bZab/

【讨论】:

  • 优秀的正是我想要的!非常感谢@kapantzak。您的示例中唯一的问题是,如果我们慢慢向下滚动,则元素会在与页脚相遇时跳回顶部。我找到了一种方法,方法是在元素到达页脚时更改底部值,我将在此处发布答案。非常感谢,你真的帮了大忙!
  • 这里是代码@kapantzak:jsfiddle.net/6bZab,现在发生了一些非常奇怪的事情,一旦元素到达页脚,它就会向右移动几个像素!!!
  • 我看到代码工作正常.. 元素没有向右移动!你确定吗?
  • 哈哈!我才意识到我从来没有向你展示过我的代码。我做了一个链接到你的。这是:jsfiddle.net/mscxp/AFDkC 第一次打开它并滚动它会向右移动
【解决方案2】:

您可以使用新的position:sticky 属性来实现类似的结果。

演示:http://jsfiddle.net/4hznD/

这是CSS代码,你想固定的&lt;div&gt;必须放在页面流底部100px处:

CSS

div{
    position: -webkit-sticky;
    position: -moz-sticky;
    position: -o-sticky;
    position: -ms-sticky;
    position: sticky;
    bottom: 0px;
    line-height: 30px;
    background: gray;
}

我不知道实际的 position:sticky 支持(我确定它适用于 Chrome),但您可能会认为在缺少时使用一些 polyfill。

【讨论】:

  • 嘿,这是 2016 年的电话。 position:sticky 仍然没有得到广泛的支持。它甚至在 Chrome 37 中被删除 (caniuse.com/#feat=css-sticky) 此外,除了“-webkit-”,这些供应商前缀不存在。
猜你喜欢
  • 2016-03-26
  • 1970-01-01
  • 2019-06-01
  • 2017-06-27
  • 1970-01-01
  • 2015-05-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多