通常,CSS 固定页脚 是最佳选择,因为它运行流畅且无需 JavaScript。如果所需的标记无法实现,则此 jQuery JavaScript 可能是另一种选择。
HTML
只需确保 #footer 是页面上最后一个可见元素。
<div id="footer">
Sticky Footer
</div>
CSS
设置固定高度是最万无一失的方法。
#footer { height: 100px; }
jQuery
当窗口加载、滚动或调整大小时,它会测试页面内容是否短于窗口高度。如果是,则表示内容下方在窗口结束前存在空白区域,因此应将页脚重新定位到窗口底部。如果不是,则页脚可以保持其正常的静态定位。
// Window load event used just in case window height is dependant upon images
$(window).bind("load", function() {
var footerHeight = 0,
footerTop = 0,
$footer = $("#footer");
positionFooter();
function positionFooter() {
footerHeight = $footer.height();
footerTop = ($(window).scrollTop()+$(window).height()-footerHeight)+"px";
if ( ($(document.body).height()+footerHeight) < $(window).height()) {
$footer.css({
position: "absolute"
}).animate({
top: footerTop
})
} else {
$footer.css({
position: "static"
})
}
}
$(window)
.scroll(positionFooter)
.resize(positionFooter)
});
似乎有一些问题……如果您不断调整和拖动窗口大小,动画似乎会排队?
您可以在动画之前添加 .stop();。或者,根本不使用 .animate,只需使用 .css 函数设置顶部值。这样会有点生硬。
我正在使用您的演示文件,其中已经包含 stop(),但动画仍在发生。
我该如何完全停止它并让页脚始终停留在页面底部?
$footer.css({
position: “absolute”
}).stop().animate({
top: footerTop
})
} else {
$footer.css({
position: “static”
})
}
抱歉,但它不太流畅……怎么样
{ position: fixed; bottom: 0; width: 100%; }
这完全违背了这一点的全部意义。这在内容底部之前停止,因此不会与任何内容重叠。将其固定到底部将愉快地覆盖内容的顶部。
这完全违背了这一点的全部意义。这在内容底部之前停止,因此不会与任何内容重叠。将其固定到底部将愉快地覆盖内容的顶部。
节省了我一天的时间,谢谢,兄弟。
Mac 10.5.8,Safari 4.0.3……这非常有故障。调整窗口大小会使页脚发生偏移(一件好事),但它不会与窗口底部齐平,而是会显示一个大的白色边框。恶心。
使用相同的规格,对我来说运行良好。我只是在 animate 之前添加了 .stop(),这可能会有所帮助。我认为 Safari 只是触发了大量的调整大小事件,您的电脑可能难以跟上。
对我来说似乎运行良好。
OS X 10.6.2 使用 Chrome 4.0.2、Safari 4.0.4 和 FF 3.5.5;继续努力。
它确实有点跳动,但这似乎更多是我的电脑问题,而不是代码本身。
为什么这么粗鲁?“恶心”是一个非常糟糕的词。为什么不使用“谢谢”呢?我的意思是,你甚至无法自己编写 JavaScript 代码。
给 Chris 先生
抱歉说了这么多。只是真的很生气。
在我的 Safari、FF 和 Chrome(Snow Leopard 上)上运行良好且外观漂亮。
Chris,你做的很棒。继续努力!
您可以完全通过 CSS 达到相同的效果,正确利用 100% 的高度以及绝对定位……生成的 CSS 在调整窗口大小时实际上会更“流畅”,因此在调整窗口大小后不会出现页脚跳动错误。需要注意的重要一点是,使页脚不要与您的内容重叠,而是当它到达该容器底部时强制滚动(此演示成功做到了这一点)……纯 CSS 版本示例:http://oribe.com/
嗨,这很酷……您是怎么做到的,请给我代码……谢谢
我通常在做“固定页脚”时只坚持使用 CSS,但这是一个很酷的示例,谢谢!
很酷的例子。我喜欢使用此纯 CSS固定页脚。与您的示例非常相似,但带有一个空的 push div。
Buenisimo Chris!
这正是我一直在寻找的。
非常感谢来自阿根廷。
Mauricio
太棒了 Chris!
这正是我一直在寻找的。
非常感谢来自阿根廷。
Mauricio
此方法在使用缩放时存在一些错误,但当您太懒得使用 CSS 技巧时,它很好用。
此方法的优点是它适用于未定义高度的页脚(某些网站在页脚中包含长列表,您无法为其使用高度)。
请注意,您必须为页脚使用 width:100%,因为 position:absolute 会将宽度缩小到内容。如果您想将其居中,您可能还需要使用页脚包装器。
我喜欢它,页脚一直让我很头疼
谢谢。
太棒了,谢谢,这非常好
这太棒了,非常感谢。有没有办法让它从底部开始,而不是在脚本加载时从顶部向下滑动?
谢谢,我喜欢这个技巧,它真的有效
感谢分享。
这将有助于我的项目。
如果你不想有任何花哨的动画,可以添加“,-1”,如下所示
之前
.animate({
top: footerTop
})
之后
.animate({
top: footerTop
},-1)
然后就完成了。
谢谢,-1 非常有效。
我喜欢!谢谢!!
你救了我的命!:D 谢谢!
太棒了!真是救星!
Luco 对动画的修复最好.. 赞一个!!
(将当前的“1000”替换为“-1”)。这里其他的解决方案对我完全不起作用(会粘在顶部.. 或者会粘在底部并覆盖那里已经存在的东西)。
此演示在 Mac OS X Lion 上使用 Safari、Firefox 和 Chrome 运行良好。
但我有一个问题
我想在页脚中显示一个图像,并且该图像必须位于页脚的中间。
我仍然看到图像显示在页面左侧…
有人可以告诉我如何做到这一点吗?
哦,多么好的解决方案!
感谢你的提示!
+1
向页脚添加 -10px 的上边距解决了我的大部分问题。也为页脚设置了绝对宽度。需要一些调整,但效果很好。再次感谢 Chris!
哇,我爱上你网站上的新主题了。希望我能抄袭它,哈哈,但当然我不会那样做,那会很不专业的。我仍在等待我的灵感闪现。不幸的是,我在图形艺术方面真的没有那么有天赋:(
你好.. 也许我没有理解这篇文章,但我想知道你是否可以帮我让我的页面在 Safari 中正常工作。我在我的 CSS 中添加了 {clear:both;} 以确保页脚在 Firefox 中不重叠,但 Safari 却完全乱了,我不知道如何纠正它。内容重叠页脚问题的示例可以在这里找到:(使用 Safari)
http://www.lifeafterhealth.net/recovery/healthy-things-to-do-each-day/
我想我试图“取消固定”页脚..? 有什么想法:(
感谢你的帖子。非常有用的文章!我将在我的网站上更改一些内容。
queue: false 也许也能解决问题 :)
在 Windows XP 上的 Firefox 3.6.17 上不起作用(即使是您网站上的演示页面)。此外,在 IE7 上,窗口会缓慢向下滑动,然后弹回,然后再次向下滑动。
仅供任何想知道此代码对旧浏览器的支持情况的人参考。这不是抱怨,事实上我认为这是一段很棒的代码,我可能会继续使用它,因为这些浏览器现在已经相当旧了。
好的,这是对上述代码的一点修改。这可以防止它捕捉到静态位置,以防这是您正在寻找的。
嗨,你能开始动态地使用固定定位吗?你有很多粉丝,但你使用这种旧的动画技术是在损害自己。在调整大小的时候让它进行动画会分散网站的注意力。尝试稍微修改一下固定定位,并在你的 JS 中进行操作,而不是使用绝对定位。它不会抖动。不需要动画。在你否定它之前,先试试看。
你可以在这里看到一些示例 -> PolaraGolf.com 的结账页面或 Klim.com 上的任何浮动交易,这些都是我做的。
当你完成后请告诉我,我将使用你的插件。谢谢。
我是不是漏掉了什么?这段代码似乎比需要的复杂。我用很少的代码创建了一个粘性页脚。似乎工作得很好。
// 文档就绪时...
$(document).ready(function() {
// 引入简短的变量
$box = $('#footer');
// 在页面加载时调用方法
sticky($box);
// 每次窗口大小调整时调用函数
$(window).resize(function() {
sticky($box);
});
/*
* 此方法负责“粘贴”
* 一个 DIV 始终位于窗口底部。
*/
function sticky($b) {
// 引入简短的变量
$bHeight = $b.height();
$wHeight = $(window).height();
// 操作 DIV 的样式
$b.css('position', 'fixed');
$b.css('top', $wHeight - $bHeight);
}
});
Chris,作为一个简单的建议,我认为你可能需要同时挂接到 DOMReady 和 load 事件,这样粘性页脚就会立即附加到视口的底部,如果加载图像后需要回到其原始静态位置,它就会这样做。
这最适合我
我能够通过在页脚 div 的末尾添加一个额外的 div 来解决这个问题。假设我们称该 div 为
div id=”stickyfooter”>
并在 css 中使用以下内容
#stickyfooter{
background-color: black;
background-repeat: repeat;
bottom: 0;
height: 100%;
pointer-events: none;
position: absolute;
width: 100%;
z-index: -1;
}
现在,在我的情况下,背景颜色是黑色。它可能会根据你的情况而改变,并且可能在大多数情况下都能工作
嘿,感谢 Chris 和这里的所有人。
也许我错过了什么,但我们是否只想在 body 高度小于窗口高度时才将页脚粘贴到底部?所以失去 footerHeight 是多余的..
嗨!在我看到这篇帖子之前,找到了另一种方法 =)
CSS
.stickyfooter {
position:absolute;
bottom:0px;
}
// 否则它只是一个普通的 wordpress 页脚
311 是页脚的高度…
虽然,我认为 Waynoss 的方法更简洁…
不错的帖子,伙计。我正在做一个项目,这非常有用。谢谢!
非常感谢 Chris Coyier 和 Øyvind Hauge,两种组合都适合使用或不使用动画,也感谢其他人分享他们的想法。
效果很好,伙计,谢谢。
非常有帮助。干杯!
这真是令人沮丧,这根本不起作用。它甚至在 Chrome 或 Firefox 上都没有抛出任何错误。你只需要默认的 jQuery 库,对吧?
我的代码完全没有反应,我完全无法弄清楚为什么…
所以出于某种原因,这在无序列表中不起作用…
稍微改进一下,将页脚从其当前位置向下滑动到底部。如最初所写,设置 position: absolute 会(不可见地)将顶部设置为 0,导致页脚从窗口顶部开始动画。解决方案是在同时设置 position:absolute 的同时设置当前顶部位置。
使用纯 HTML+CSS 怎么样?查看 http://ryanfait.com/sticky-footer/(IE5+ 及其他)
我认为只需这样做即可
我在让粘性页脚添加“top: —px”值方面遇到问题。有人可以看看这里吗?
http://ancellcreative.com/fmm-multiculture.org/about/board-members
并可能提供任何见解?非常感谢!
忽略我之前的评论,我已经解决了我的问题
再次感谢!
嗨,Chris,只是想说声谢谢,效果很好,正是我想要的。
尝试了几种纯 CSS 解决方案,但大多数(如果不是全部)都需要特殊的标签布局和名称/ID,使用此 jQuery 解决方案,它可以直接插入并工作。在我尝试过的所有浏览器中似乎都非常可靠,干杯。
纯 css 粘性页脚有效.. 直到你声明一个 jquery 链接。此脚本解决了这个问题。感谢作者。
我是亚洲人,所以请原谅我的语法。
但是.. 它在三星平板电脑上不起作用
谢谢,我喜欢这个技巧,它确实有效。
你好。
感谢您的代码。有人可以帮我解决以下问题吗?
这是我目前正在使用的代码片段
$(window).bind(“load”, function() {
});
我正在使用一个搜索和结果 jQuery 脚本,所以这是我想要的结果
当结果较少时,页脚需要位于屏幕底部。
但是当结果超过计算机屏幕可以处理的范围时,我希望页脚被推到搜索结果的最后一个结果下方。
结果显示在一个 div 中。
感谢您的帮助。
哇,这有效.. 不过必须在 Safari 中进行测试。
谢谢。
似乎存在一个问题,如果页脚具有静态位置(但如果它是绝对位置则不会),则页脚的高度会被计算两次。我通过在页脚位置不是绝对位置时将 footerHeight 设置为 0(在将其设置为页脚的实际高度之后)来解决此问题
if($footer.css(“position”) != “absolute”){
footerHeight = 0;
}
当然,您也可以说如果绝对将其设置为页脚高度,否则设置为 0。
通过这样做,如果页脚已包含在主体中(不是绝对的),则会将 footerHeight 为 0 的值添加到主体高度。
唯一有点难看的是,如果您登录到 WordPress,它会错误计算 32px,因为有一个烦人的 adminbar 使视口相对于主体高出 44 像素。您可以认为这是理所当然的(仅对管理员可见)或使用类似以下内容
if($(“#wpadminbar”).length){
footerHeight += 32;
}
这使得与视口高度进行比较的值高出 32 像素,但前提是 adminbar 存在。
Daniel Flores 先生,感谢您分享此信息。评论中的代码非常酷,对我来说很有效。
在“html”和“body”标签在 css 中都定义了“height: 100%”的情况下,我在实现此功能时遇到了麻烦。
它似乎允许“body”或“html”设置为 100% 高度,但不能同时设置。
知道为什么吗?
(而且我确实需要将两者都定义为 100%,因为我正在运行另一个脚本)
我遇到了一个问题,即在某些页面上,页脚应该距离前一个块底部大约一英寸,因此应该粘在屏幕底部,但它没有。我的快速解决方法是在 footerTop = ($(window).scrollTop() + $(window).height() – footerHeight) + “px”; 下面设置 footerHeight=0;(基本上回到 0... 但仅在 footerTop 行之后,而不是替换之前的 footerHeight)。这为我解决了这个问题。(替换原始 footerHeight 会导致页脚最终位置过低…)仅供遇到相同问题的任何人参考…