内容を説明するとbody要素(青色の枠)の中に三つのdiv要素(緑、黄、赤色の枠)をネストさせたHTMLを用意します。

これらの要素には次のスタイルを適用しています。
body {
background: #EEEEEE;
overflow: hidden;
border: 20px blue solid;
margin: 10px;
padding: 5px;
}
#d1 {
border: 20px green solid;
margin: 18px;
padding: 5px;
}
#d2 {
border: 20px yellow solid;
margin: 10px;
padding: 5px;
}
#d3 {
border: 20px red solid;
margin: 10px;
padding: 5px;
}
この時、赤枠のdiv要素(d3)のoffsetTop値を求めたところ、88となるところが73となってしまいました。原因を調べたところ緑枠のmargin-top-width値がoffsetTopに加算されていない事がわかりました。さらに調べたところmargin-top-width値が1~15までは加算されず、16以上は加算されることが分かりました。
またこの事象はbody要素と緑枠のdiv要素の間にp要素を入れても発生するのですが、table要素(下記イメージ)を入れると今度は正しい値を返します。事象が発生する要素とそうでない要素のパターンはまだ整理できていない状態です。

IEの内部ではoffsetTop値の算出にどんなことをしているのか気になる今日この頃です。
0 件のコメント:
コメントを投稿