2008-01-31

IEは特定条件下でoffsetTopの値がおかしくなる

JavaScriptのoffset計算について調査していたところIEのoffsetTop値がおかしいことに気づきました(Firefox、Opera、Safariは問題無し)。試しにjQueryプラグインのDimensionsでも試してみたところ、こちらも正確なoffsetTop値を算出できないようです。

内容を説明すると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 件のコメント: