FIDDLE IS HERE(登录到控制台)
情况是页面以<H1>
开头,其边距最大值大于<body>
上的边距。
这会导致<body>
在页面中被推低,但$('body').offset().top
仍然设置为<body>
的margin-top。这当然导致我的调试元素(突出显示元素的位置)不正确,因为正文的虚拟元素现在处于错误的位置。
奇怪的是$(elem).offset()
值的其余部分对<body>
的任何后代都是正确的。
是否有一个修复因为用while循环手动检查身体的递归第一个孩子的margin-top?
注意Safari 6上的问题,但我怀疑我也会在Chrome上找到它。
答案 0 :(得分:2)
使用偏移加上html
元素的高度减去body
元素的差异可能会有效。
console.log(“body.offset()。top =”+($('html')。offset()。top + $('html')。height() - $('body')。高度()));
更新:此解决方案仅在页面上没有边距底部时才有效。
您还可以在页面底部添加一个明确的div。
$('body').append("<div style=\"clear: all;\"> </div>");
请注意,div必须具有可用的内容。
答案 1 :(得分:1)
我找到了John Resig的帖子,关于getBoundingClientRect
offset()
的快速和真棒... {我想知道为什么它不用于jQuery的-webkit-margin-before: 0.67em;
!
我会改用这种方法,希望它不会遇到同样的问题。
更新:看起来不错! (非整数最高值是由于某种方式具有样式{{1}})
你可以看到身体有margin = 8
答案 2 :(得分:1)
jQuery 1.9.0解决了这个问题。非常感谢,jQuery非常棒。
答案 3 :(得分:0)