2010-05-16 4 views
11

J'utilise .position pour trouver le décalage de l'élément par rapport au parent, mais il semble renvoyer une valeur qui est le décalage d'un parent vers le haut l'arbre des ancêtres.JQuery - .position ne retourne pas de décalage par rapport au parent

J'ai un bouton, et son enveloppé avec un div et c'est le seul élément de ce div. Le div est flotté à droite. .position renvoie une valeur comme {left:780, top:370}, lorsque la valeur réelle doit être autour de {left:200, top:0}.

J'utilise jquery 1.4

Répondre

19

Si je ne me trompe pas, je pense que cela est un problème de CSS, pas nécessairement une jQuery un .. je crois comprendre que la valeur par défaut de la CSS « ​​position » propriété est static (non absolu, relatif), et le positionnement est calculé par rapport au premier ancêtre qui n'est pas défini sur static.

Si l'élément n'a pas d'ancêtre avec une position non statique, l'élément sera positionné par rapport au bloc html. Si vous souhaitez positionner un div relatif à un div wrapper, essayez de définir la propriété position de la div wrapper à autre chose que statique (relative, absolue), selon vos besoins.

Voici un exemple simple qui démontre ce ..

<html> 
    <style type="text/css"> 
    .divOuter { border:1px solid Green; width:350px; height:50px; padding:2px; margin-left:80px; } 
    .divInner{border:1px solid Blue; width:200px; height:50px; padding:2px; position:absolute; left:100px;} 
</style> 
<body> 
<div class="divOuter"> 
    <div class="divInner"> 
    positioned relative to html block 
    </div> 
    </div> 
     <div class="divOuter" style="position:relative;"> 
    <div class="divInner"> 
    positioned relative to parent div 
    </div> 
    </div> 
    </body> 
    </html> 
+1

Merci, ce fut, je viens de mettre la div d'emballage pour être position: relative et mon problème est résolu :) – Kyle

+0

Eh oui, sur place @markt . Je peux confirmer qu'il s'agit bien d'un problème de CSS et que cette solution fonctionne comme un charme. – Ben

Questions connexes