Respuestas:
Si son iguales depende del contexto.
position
devuelve un {left: x, top: y}
objeto relativo al padre desplazado
offset
devuelve un {left: x, top: y}
objeto relativo al documento .
Obviamente, si el documento es el padre desplazado, que suele ser el caso, estos serán idénticos. El padre compensado es "el elemento que contiene la posición más cercana".
Por ejemplo, con este documento:
<div style="position: absolute; top: 200; left: 200;">
<div id="sub"></div>
</div>
Entonces el $('#sub').offset()
será {left: 200, top: 200}
, pero .position()
será {left: 0, top: 0}
.
sub
un posicionamiento absoluto a 0: 0, entonces estará en la esquina superior izquierda del padre desplazado.
.position
se actualizó en 1.12.0 => github.com/jquery/jquery/issues/1708
El método .offset () nos permite recuperar la posición actual de un elemento en relación con el documento . Contraste esto con .position () , que recupera la posición actual en relación con el padre desplazado . Cuando se coloca un nuevo elemento encima de uno existente para la manipulación global (en particular, para implementar arrastrar y soltar), .offset () es lo más útil.
Fuente: http://api.jquery.com/offset/
Ambas funciones devuelven un objeto plano con dos propiedades: ancho y alto.
offset () se refiere a la posición relativa al documento.
position () se refiere a la posición relativa a su elemento padre
PERO cuando la posición css del objeto es "absoluta" ambas funciones devolverán ancho = 0 y altura = 0