我设法让它在我的应用程序中工作,这是使底部样式与传递给附加调用的底部一致的问题。如果您的页脚具有固定高度并且最近定位的父级是主体,那么为两者传递相同的值就很重要了。这对于此处和此处所见的 Bootstrap 2.3 文档来说已经足够好了。
--
现在假设您没有固定高度的页脚:
第 1 步:最近定位的父级(偏移父级)
首先,我们使用绝对定位将其粘贴到底部,但由于您最近定位的父级将是主体(包括您的页脚),因此您没有固定的底部值。为了解决这个问题,我们必须创建一个新的定位父对象,它包含除了页脚之外的所有内容(重要:页眉也可能在外面)。设置position: relative;
为顶部.container
或其祖先之一(重要:页脚必须在此元素之后)。
第 2 步:页脚高度
现在,你的底部是相对于它的容器而不是 body,但是 affix 的底部值(用于知道何时将词缀贴到底部)仍然是相对于 body 的末端,所以你必须给它传递一个函数计算容器之后元素的高度,如果它只是页脚,那么这就足够了$('footer').outerHeight(true)
:
第 3 步:故障排除
现在,一切都正确了,但是三件事仍然可能导致不正确的摇杆位置和疯狂的闪烁:
除了您没有考虑到的页脚之外的其他视觉元素,例如第二个页脚或并不总是显示的,例如有用的rails-footnotes gem;
将元素附加到 DOM 的浏览器扩展,如果它们被隐藏或不在流中,那么你不应该计算它们的高度,更简单的解决方法是只计算你的应用程序知道的元素,但是扩展可能会结束打破你的应用程序。您可以通过使用未安装扩展程序的浏览器或配置来测试扩展程序是否会导致您出现问题,或者只是转到“色情模式”(Chromium 上的隐身模式(Ctrl+ Shift+ n),Firefox 上的隐私浏览(Ctrl+ Shift+ p)) 如果您没有启用扩展。
Javascript 库也会将元素附加到 DOM,你也不应该计算它们的高度。
要解决这些问题,您可以尝试使用整个单词(CoffeeScript with Underscore.js):
_($('footer').nextAll(':visible').addBack())
.filter((el) -> el.offsetParent?)
.reduce(((memo, el) -> memo + $(el).outerHeight(true)), 0)
同样的事情,使用 Javascript 和 jQuery.fn.each:
var sum = 0
$('footer').nextAll(':visible').each(function() {
this.offsetParent != null && sum += $(this).outerHeight(true)
}
return sum
或者你可以只考虑你知道的元素(我更喜欢这个,我为挑战编码的另一个):
$('footer').outerHeight(true) + ($('#footnotes_debug').outerHeight(true) || 0)