この属性の基本的な使用法については、 offsetleft 属性の使用法の詳細な説明 の章を参照してください。
この属性には特定の互換性の問題があります。つまり、IE7 ブラウザでは、その戻り値は最も近い親要素の左側までの距離になります。
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name="author" content="http://www.softwhy.com/" /> <title>蚂蚁部落</title> <style type="text/css"> * { margin: 0px; padding: 0px; } #main { width: 300px; height: 300px; background: red; position: absolute; left: 100px; top: 100px; } #box { width: 200px; height: 200px; background: blue; margin:50px; overflow:hidden; } #inner { width: 50px; height: 50px; background: green; text-align: center; line-height: 50px; margin: 50px; } </style> <script type="text/javascript"> window.onload=function(){ var inner=document.getElementById("inner"); inner.innerHTML=inner.offsetLeft; } </script> </head> <body> <div id="main"> <div id="box"> <div id="inner"></div> </div> </div> </body> </html>
上記のコードは他のブラウザでは値 100 を返しますが、IE7 では戻り値は 50 です。
IE6 についてはテストがありませんので、興味があればテストしてみてください。
少し時間をとって、offsetLeft と style.left の違いを紹介しましょう
offsetLeft は、親オブジェクトを基準にして左マージンを取得します
left は、位置属性を持つ親オブジェクトを基準とした左マージン
を取得または設定します (位置は相対として定義されます)。親 div の位置が相対として定義され、子 div の位置が絶対として定義されている場合、子 div の style.left の値は親 div の値に対して相対的になります。
これは offsetLeft と同じですが、違いは次のとおりです:
1. style.left は 28px などの文字列を返し、offsetLeft は 28 の値を返します。取得した値を計算する必要がある場合は、
offsetLeft を使用すると便利です。
2. style.left は読み取り/書き込み可能ですが、offsetLeft は読み取り専用なので、div の位置を変更するには、style.left を変更するだけです。
3. style.left の値を事前に定義する必要があります。定義されていない場合、取得される値は空になります。
で定義されている場合は、HTML で定義する必要があります。
CSS では、style.left の値が空のままです。これは、最初に遭遇した問題です。style.left の値を常に取得できません。
offsetLeft は、div の位置を事前に定義しなくても取得できます。