offsetParent算法分析


根據其自身定位情況與父節點的標簽類型與定位情況,分為以下二十種情況(IE8, chrome23, opera12的結果):

  • 沒有已定位的父節點,且自身position: relative的DIV元素的offsetParent為BODY
  • 沒有已定位的父節點,且自身position: absolute的DIV元素的offsetParent為BODY
  • 沒有已定位的父節點,且自身position: fixed的DIV元素的offsetParent為BODY
  • 沒有已定位的父節點,且自身position: static的DIV元素的offsetParent為BODY
  • 擁有一個已定位的父節點,且自身position: relative的DIV元素的offsetParent為其最近被定位的祖先
  • 擁有一個已定位的父節點,且自身position: absolute的DIV元素的offsetParent為其最近被定位的祖先
  • 擁有一個已定位的父節點,且自身position: fixed的DIV元素的offsetParent為BODY
  • 擁有一個已定位的父節點,且自身position: static的DIV元素的offsetParent為其最近被定位的祖先
  • 在table之內,td與table都沒有定位,且自身position: relative的DIV元素的offsetParent為BODY
  • 在table之內,td與table都沒有定位,且自身position: absolute的DIV元素的offsetParent為BODY
  • 在table之內,td與table都沒有定位,且自身position: fixed的DIV元素的offsetParent為BODY
  • 在table之內,td與table都沒有定位,且自身position: static的DIV元素的offsetParent為其最近的TD、TH元素
  • 在table之內,td相對定位,且自身position: relative的DIV元素的offsetParent為其最近的TD、TH元素
  • 在table之內,td相對定位,且自身position: absolute的DIV元素的offsetParent為BODY
  • 在table之內,td相對定位,且自身position: fixed的DIV元素的offsetParent為BODY
  • 在table之內,td相對定位,且自身position: static的DIV元素的offsetParent為其最近的TD、TH元素
  • 在table之內,table相對定位,且自身position: relative的DIV元素的offsetParent為其最近的TABLE元素
  • 在table之內,table相對定位,且自身position: absolute的DIV元素的offsetParent為其最近的TABLE元素
  • 在table之內,table相對定位,且自身position: fixed的DIV元素的offsetParent為BODY
  • 在table之內,table相對定位,且自身position: static的DIV元素的offsetParent為其最近的TD、TH元素

我們可以總結以下幾條規律:

a)	position為fixed元素是沒有offsetParent,但firefox統一返回body。
b)	position為absolute, relative的元素的offsetParent總是為其最近的已定位的元素,沒有找最近的td,th元素,再沒有找body。
c)	position為static的元素的offsetParent則是先找最近的td,th元素,再沒有找body。
d)	body為最頂層的offsetParent。

posted on 2012-10-30 17:42  司徒正美  閱讀(3001)  評論(5編輯  收藏


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM