molily: Position eines relativ positionierten Elements ermittel

Beitrag lesen

Wobei ich die Aussage mit einem IE 7 nicht nachvollziehen kann, es sei denn ich hab den Fehler falsch verstanden: hier mein Test.

Try this:

<!DOCTYPE html>  
<html>  
<head>  
<script>  
[code lang=javascript]var oldOffsetParent, oldTarget;  
document.onmouseover = function (e) {  
	e = e || window.event;  
	var target = e.target || e.srcElement;  
	  
	if (oldOffsetParent) {  
		oldOffsetParent.className = "";  
	}  
	var offsetParent = target.offsetParent;  
	offsetParent.className = "offsetParent";  
	oldOffsetParent = offsetParent;  
	  
	if (oldTarget) {  
		oldTarget.className = "";  
	}  
	target.className = "target";  
	oldTarget = target;  
	  
	document.getElementById("ausgabe").innerHTML = target.nodeName + (target.id ? "#" + target.id : "") + " to " + offsetParent.nodeName + (offsetParent.id ? "#" + offsetParent.id : "") + ": " + target.offsetTop;  
};

</script>
<style>

html { margin: 0; padding: 0; border: 0 none; }  
body  { margin: 0; padding: 20px; }  
#rels { border: 1px solid black; padding-bottom: 40px; }  
#rels div { position: relative; top: 20px; left: 20px; padding-bottom: 40px; background-color: #edd; }  
#rels p { margin: 0; background-color: #ccd; line-height: 20px; }  
#rels .offsetParent { background-color: red; }  
#rels .target { background-color: blue; }  
#ausgabe { margin-top: 20px; }

</style>
</head>
<body>

<div id="rels">
<div id="rel1">
<p>bla</p>
<div id="rel2">
<p>bla</p>
<div id="rel3">
<p>bla</p>
</div>
</div>
</div>
</div>

<div id="ausgabe"></div>

</body>
</html>[/code]

Geh mal mit der Maus auf die p-Elemente. Da kommen Phantasiezahlen im IE < 8.

offsetTop für Element in einem Element position:relative wird falsch wiedergegeben. offsetParent verweist zwar auf das Element mit position:relative, aber offsetTop bezieht sich nicht auf dieses Element.

Die top- und left-Angaben sind übrigens nicht nötig, offsetTop ist auch ohne sie fehlerhaft.

Aber ich sehe gerade: Wenn die Element mit position:relative hasLayout haben (einfach mal zoom:1 für #rels div vergeben), wird offsetTop korrekt kalkuliert. LOL. Das bringt uns ja schonmal weiter und liefert:
http://lists.w3.org/Archives/Public/www-style/2008Apr/0468.html
http://annevankesteren.nl/2006/05/offset

Mathias