2016-01-22 100 views
8

我在HTML文档中有一个元素id="stimulus"了解偏移方法的返回值

当我在浏览器中打开此文档,并使用浏览器的控制台进行调查#stimulus性能,这是我所看到的:

> $('#stimulus').offset() 
< Object {top: 0, left: 0} 
> $('#stimulus').css('top') 
< "-155.761px" 
> $('#stimulus').css('left') 
< "253.087px" 

我该怎样解读? topoffset与使用css方法访问的top不同?

回答

5

offset() documentation开始,偏移量来自文档的顶部;而顶部和左侧的CSS属性是相对于父项。也许你想看看position()来获得相对于offset parent的偏移量。

+0

,那不是意味着'#stimulus'应该出现在(0,0)整个文档的位置?那不是网页的左上角? (这不是'#刺激'出现的地方。) – dbliss

+1

@dbliss您的元素是否隐藏,用填充,边框或边距进行偏移?该文件表示,它不提供特殊情况下的正确位置 –

+0

@dbliss为什么不提供复制问题的简约样本?当我访问刺激被隐藏的值时,它应该是显而易见的 –

4

偏移量是整个页面中的位置

CSS顶部将现在的位置元件相对于它的位置最靠近的祖先。 这祖先可能是在页面的任何地方,因此偏移和顶部不匹配,除非没有定位的祖先

1

jQuery's .offset() documentation

.offset()方法允许我们检索元素的当前位置相对于文件。将其与.position()进行对比,其检索相对于抵消父母的当前位置

.css()方法抽象天然CSSStyleDeclaration API,它返回相对于父元素,的位置,但只有当它是在CSS明确指定。所以,如果你想要的话,然后用.position()而不是.offset()

演示

$(function() { 
 
    var child = $('.child'); 
 

 
    console.log('offset: ', child.offset()); 
 
    console.log('position: ', child.position()); 
 
    console.log('css: ', { 
 
    top: child.css('top'), 
 
    left: child.css('left') 
 
    }); 
 
});
html, 
 
body { 
 
    margin: 0; 
 
    padding: 0; 
 
} 
 
.parent { 
 
    position: absolute; 
 
    top: 5px; 
 
    left: 5px; 
 
} 
 
.child { 
 
    position: absolute; 
 
    top: 10px; 
 
    left: 10px; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<!-- results pane console output; see http://meta.stackexchange.com/a/242491 --> 
 
<script src="https://gh-canon.github.io/stack-snippet-console/console.min.js"></script> 
 

 
<div class="parent"> 
 
    <div class="child">Hello World</div> 
 
</div>

4

你可能得到的结果是不同,因为id="stimulus"正在动画,你在不同的帧sended console.log。或者这个元素实际上是“静态的”,并且有一些其他属性会改变他的位置。

就像在我的例子

console.log("Offset:", $('.test').offset()); // returns {top: 0, left: 0} 
 
console.log("Top/Left:", $('.test').css('top'), $('.test').css('left')); // returns -200px, -20px
.test{ 
 
    position: absolute; 
 
    top: -200px; 
 
    left: -20px; 
 
    transform: translateY(200px) translateX(20px); 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div class="test"></div>